我寫(xiě)了一個(gè)Flask-restful的快速模板
前言
前幾天在進(jìn)行項(xiàng)目開(kāi)發(fā)的時(shí)候,發(fā)現(xiàn)用Flask寫(xiě)一些輕量化的Web程序還是比較合適的。其實(shí)在Flask家族中,為了能夠更加方便的開(kāi)發(fā)Restful風(fēng)格的接口,F(xiàn)lask-restful是一個(gè)不錯(cuò)的選擇。雖然Flask-restful提供了比較完整的官方文檔,但是距離開(kāi)發(fā)上線項(xiàng)目還是不是很方便,因此我寫(xiě)了一個(gè)Flask-restful的快速模板。
此項(xiàng)目采用Mysql作為持久層數(shù)據(jù)庫(kù),實(shí)現(xiàn)了一個(gè)資源的5個(gè)接口,滿足基本的web開(kāi)發(fā)需求。
項(xiàng)目地址
首先給出項(xiàng)目地址:Flask-restful-quick-start

項(xiàng)目簡(jiǎn)介
首先是項(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)圖來(lái)劃分功能塊,方面劃分項(xiàng)目模塊,并且提升可維護(hù)性。
目前我認(rèn)為這是一個(gè)相對(duì)比較科學(xué)的文件組織方案了。
Restful接口設(shè)計(jì)
基本的接口從兩個(gè)路由進(jìn)行接收
======================================
請(qǐng)求方法 路由 請(qǐng)求內(nèi)容
POST /userList userInfo
GET /userList None
GET /user userId
PUT /user userInfo
DELETE /user userId
======================================
做一個(gè)簡(jiǎn)單的介紹就是增加資源和查詢(xún)?nèi)抠Y源從資源列表接口走。
其他的帶參數(shù)請(qǐng)求和修改、刪除等從專(zhuān)門(mén)的資源接口走。
這樣就能避免GET請(qǐng)求帶參數(shù)和不帶參數(shù)的問(wèn)題了。
在項(xiàng)目中統(tǒng)一的處理能夠提升可靠性,降低編碼錯(cuò)誤,我這里對(duì)兩點(diǎn)進(jìn)行了統(tǒng)一。
1、Sqlalchemy的Model層對(duì)象和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
通過(guò)以上代碼即可輕松地將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)容。
啟動(dòng)項(xiàng)目
安裝
首先克隆本項(xiàng)目
$ git clone git@github.com:Jarrettluo/flask-restful-quick-start.git
cd flask-restful-quick-start
建議大家使用ide創(chuàng)建一個(gè)虛擬環(huán)境venv,避免項(xiàng)目使用的包與系統(tǒng)包不一致。
$ pip install requirements.txt
最后啟動(dòng)項(xiàng)目,開(kāi)始開(kāi)發(fā)
$ python run main.py
修改配置
在項(xiàng)目中的init.py中設(shè)置了連接數(shù)據(jù)庫(kù)的各項(xiàng)參數(shù),這些都是需要來(lái)自定義設(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)行修改。
同時(shí)也強(qiáng)烈建議大家將這些設(shè)置信息放到config.py文件中,這樣方便統(tǒng)一修改。
在主程序中,防止了一個(gè)數(shù)據(jù)庫(kù)初始化的方法,可以進(jìn)行數(shù)據(jù)庫(kù)的清空和創(chuàng)建。
def init_db():
# 丟掉全部表
db.drop_all()
# 創(chuàng)建全部表
db.create_all()
快速開(kāi)發(fā)
增加模塊就只需要將現(xiàn)有的user模塊復(fù)制以后進(jìn)行修改即可。
在flask_app.__init.py中注冊(cè)藍(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)容請(qǐng)參考Flask_restful的官方文檔.
如果您覺(jué)得上面的內(nèi)容對(duì)您有幫助歡迎點(diǎn)贊、評(píng)論、轉(zhuǎn)發(fā)!
更多內(nèi)容請(qǐng)查閱作者博客:https://jiaruiblog.com
或者star作者github: https://github.com/Jarrettluo?tab=repositories