我寫了一個Flask-restful的快速模板
前言
前幾天在進(jìn)行項(xiàng)目開發(fā)的時候怠李,發(fā)現(xiàn)用Flask寫一些輕量化的Web程序還是比較合適的窗声。其實(shí)在Flask家族中蘑拯,為了能夠更加方便的開發(fā)Restful風(fēng)格的接口巧颈,F(xiàn)lask-restful是一個不錯的選擇畦木。雖然Flask-restful提供了比較完整的官方文檔,但是距離開發(fā)上線項(xiàng)目還是不是很方便砸泛,因此我寫了一個Flask-restful的快速模板十籍。
此項(xiàng)目采用Mysql作為持久層數(shù)據(jù)庫,實(shí)現(xiàn)了一個資源的5個接口唇礁,滿足基本的web開發(fā)需求勾栗。
項(xiàng)目地址
首先給出項(xiàng)目地址:Flask-restful-quick-start
項(xiàng)目簡介
首先是項(xiàng)目的文件結(jié)構(gòu)。
├── flask_app
│ ├── common
│ │ ├── __init__.py
│ │ └── utils.py
│ ├── user
│ │ ├── __init__.py
│ │ ├── models.py
│ │ └── views.py
│ └── __init__.py
├── config.py
├── LICENSE
├── main.py
└── requirements.txt
項(xiàng)目中采用了藍(lán)圖來劃分功能塊盏筐,方面劃分項(xiàng)目模塊围俘,并且提升可維護(hù)性。
目前我認(rèn)為這是一個相對比較科學(xué)的文件組織方案了。
Restful接口設(shè)計(jì)
基本的接口從兩個路由進(jìn)行接收
======================================
請求方法 路由 請求內(nèi)容
POST /userList userInfo
GET /userList None
GET /user userId
PUT /user userInfo
DELETE /user userId
======================================
做一個簡單的介紹就是增加資源和查詢?nèi)抠Y源從資源列表接口走界牡。
其他的帶參數(shù)請求和修改簿寂、刪除等從專門的資源接口走。
這樣就能避免GET請求帶參數(shù)和不帶參數(shù)的問題了欢揖。
在項(xiàng)目中統(tǒng)一的處理能夠提升可靠性陶耍,降低編碼錯誤,我這里對兩點(diǎn)進(jìn)行了統(tǒng)一她混。
1烈钞、Sqlalchemy的Model層對象和dict之間的轉(zhuǎn)換。
def row2dict(row):
"""
參考文檔 https://stackoverflow.com/questions/1958219/convert-sqlalchemy-row-object-to-python-dict
將model轉(zhuǎn)換為dict
:param row: Sqlalchemy model
:return: 輸出的字典
"""
out_dict = {}
for column in row.__table__.columns:
out_dict[column.name] = str(getattr(row, column.name))
return out_dict
通過以上代碼即可輕松地將model轉(zhuǎn)換為dict的字典了坤按。
2毯欣、統(tǒng)一的回復(fù)內(nèi)容
class BaseResponse:
def __init__(self):
self.result_code_success = 200
self.result_code_fail = 201
def success(self, msg="success", data={}):
result = {
"code": self.result_code_success,
"message": msg,
"data": data
}
return jsonify(result)
def fail(self, msg="fail", data={}):
result = {
"code": self.result_code_fail,
"message": msg,
"data": data
}
return jsonify(result)
統(tǒng)一的回復(fù)內(nèi)容包括了“成功”和“失敗”兩種情況,可自定義回復(fù)編碼和內(nèi)容臭脓。
啟動項(xiàng)目
安裝
首先克隆本項(xiàng)目
$ git clone git@github.com:Jarrettluo/flask-restful-quick-start.git
cd flask-restful-quick-start
建議大家使用ide創(chuàng)建一個虛擬環(huán)境venv酗钞,避免項(xiàng)目使用的包與系統(tǒng)包不一致。
$ pip install requirements.txt
最后啟動項(xiàng)目来累,開始開發(fā)
$ python run main.py
修改配置
在項(xiàng)目中的init.py中設(shè)置了連接數(shù)據(jù)庫的各項(xiàng)參數(shù)砚作,這些都是需要來自定義設(shè)置的。
user = "root"
password = "123456"
database = "flask_quick" # 需要修改的內(nèi)容
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://%s:%s@localhost:3306/%s" % (user, password, database)
在這里使用了MysqlDB嘹锁,可以根據(jù)實(shí)際情況葫录,進(jìn)行修改。
同時也強(qiáng)烈建議大家將這些設(shè)置信息放到config.py文件中领猾,這樣方便統(tǒng)一修改米同。
在主程序中,防止了一個數(shù)據(jù)庫初始化的方法摔竿,可以進(jìn)行數(shù)據(jù)庫的清空和創(chuàng)建面粮。
def init_db():
# 丟掉全部表
db.drop_all()
# 創(chuàng)建全部表
db.create_all()
快速開發(fā)
增加模塊就只需要將現(xiàn)有的user模塊復(fù)制以后進(jìn)行修改即可。
在flask_app.__init.py中注冊藍(lán)圖
from flask_app.user import user_blueprint
app.register_blueprint(user_blueprint, url_prefix="/user")
在flask_app.user.__init.py中增加藍(lán)圖
user_blueprint = Blueprint("user_blueprint", __name__, url_prefix="/user")
from flask_app.user import views
enjoy继低。
結(jié)尾
純新手向的指導(dǎo)熬苍,更多的內(nèi)容請參考Flask_restful的官方文檔.
如果您覺得上面的內(nèi)容對您有幫助歡迎點(diǎn)贊、評論袁翁、轉(zhuǎn)發(fā)冷溃!
更多內(nèi)容請查閱作者博客:https://jiaruiblog.com
或者star
作者github: https://github.com/Jarrettluo?tab=repositories