運用flask、flask-restful開發rest風格的接口,並使用藍圖增長代碼的延展性和可擴展性。

本人作爲一個測試人員,以前也有寫過,想要測試好接口,那必需要知道如何開發一個接口的重要性。html

以前也寫過通flask或者flask-retful開發接口,但那些只是一些最簡單的demo,不具備很好延展性和擴展性。python

這次咱們帶一整個完整的demogit

使用flask-retfull,orm,藍圖,來讓代碼更加具備可塑性。github

這次咱們實現了5個接口,固然筆者還在不斷的完善中。文末會貼出代碼的git地址,以爲有用的朋友能夠關注一下。sql

首先看一下咱們的代碼目錄:數據庫

db:因爲運用的是sqlite數據庫,此處爲存放數據庫文件。
file:模擬的上傳文件的操做,凡是經過上傳文件接口上傳的文件都存在此處。
src:
  --common : 寫一個公共的方法
  --module: 存放相關藍圖
    --user : user爲本項目的一個藍圖。(若有須要可擴展其它藍圖文件,只須要在主app中註冊該藍圖及可)
venv : 本項目的虛擬目錄
app  :主啓動文件
models : 數據庫orm
settings  : 本項目相關設置

  數據庫orm的建立,以及flask項目的相關配置,藍圖的使用和註冊,這裏不過多的講,咱們重點講一下接口代碼的實現方法。json

一、查詢接口:這裏主要是根據名字來查詢,並進行了分頁的處理。當不傳名字參數時,則認爲是查詢所有數據。flask

如下是查詢使用的orm:restful

stu=Student.query.filter(and_(Student.name == name, Student.is_del == 0)).paginate(page=page,per_page=num)

參數講解:name爲用戶名字,page爲頁數,per_page爲每頁條數。session

result = []
for s in stu.items:
  result.append(s.to_json())

以上是把查詢出來的數據進行遍歷並賦值給一個列表以便最後返回。

二、添加接口:是根據提交的數據直接把數據插入到數據表中,此處須要注意的是全部數據不能爲空。

stu = Student(name=name, sex=sex, age=age, grade=grade, source=source, face=face)
if name and sex and age and grade and source and face:
   try:
       db.session.add(stu)
       db.session.commit()
           return make_result()
   except:
        return make_result(code=Code.DATA_FAIL)
else:
   return make_result(code=Code.PARAM_FAIL)

三、上傳文件接口:此處是模擬上傳,只是把上傳的文件保存到了項目的file文件夾下,但此處須要注意是,定義上傳文件參數類型的時候須要導入一個包。

from werkzeug.datastructures import FileStorage

四、刪除接口:本着不能隨意刪除數據的原則,咱們在建立表的時候,添加一個is_del字段來肯定只條數據是否刪除。所以刪除接口的本質是把這個字段改成1。

五、修改接口:修改接口的是根據表id,把數據查詢出來,而後再根據其要修改的字段來進行修改。(原理上和刪除接口同樣)此處須要注意的是,修改數據不會全部數據都修改,只會修改其中某一條或幾條數據,咱們接口定義的是,若是修改才傳只參數,不修改則不傳,所以:

stu = Student.query.filter(Student.id == id).first() if stu: if name or sex or age or grade or source or face: if name: stu.name = name if sex: stu.sex = sex if age: stu.age = age if grade: stu.grade = grade if source: stu.source = source if face: stu.face = face db.session.add(stu)

有些參數就修改,無則不修改。

 

最後須要說明一點,由於咱們寫的rest風格的接口,所以返回的數據應該是json格式的,所以咱們在建立Orm數庫表時,建立了一個to_json()方法,以供使用。

def to_json(self): return { 'id': self.id, 'name': self.name, 'sex': self.sex, 'age': self.age, 'grade': self.grade, 'source': self.source, 'face': self.face, 'is_del': self.is_del }

 

 

 

以上就是咱們所實現的所有接口。

 

git址址:https://github.com/gfihdx/flask-restful.git

有興趣的能夠去git clone一下,並關注,後期更新。

下次更新目標,多表的聯合查詢,及查詢數據的格式化方法優化。

 

注:雖然文章拙劣,但轉載請註明出處。

原文出處:https://www.cnblogs.com/Alin-2016/p/11065322.html

相關文章
相關標籤/搜索