本人做為一個測試人員,之前也有寫過,想要測試好接口,那必須要知道如何開發一個接口的重要性。
之前也寫過通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一下,並關注,后期更新。
下次更新目標,多表的聯合查詢,及查詢數據的格式化方法優化。
注:雖然文章拙劣,但轉載請注明出處。