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


本人做為一個測試人員,之前也有寫過,想要測試好接口,那必須要知道如何開發一個接口的重要性。

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

此次我們帶一整個完整的demo

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

此次我們實現了5個接口,當然筆者還在不斷的完善中。文末會貼出代碼的git地址,覺得有用的朋友可以關注一下。

首先看一下我們的代碼目錄:

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

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

1、查詢接口:這里主要是根據名字來查詢,並進行了分頁的處理。當不傳名字參數時,則認為是查詢全部數據。

以下是查詢使用的orm:

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

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

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

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

2、添加接口:是根據提交的數據直接把數據插入到數據表中,此處需要注意的是所有數據不能為空。

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)

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

from werkzeug.datastructures import FileStorage

4、刪除接口:本着不能隨意刪除數據的原則,我們在創建表的時候,添加一個is_del字段來確定只條數據是否刪除。因此刪除接口的本質是把這個字段改為1。

5、修改接口:修改接口的是根據表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一下,並關注,后期更新。

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

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM