1、Restful 是什麼 ?
簡單來說,Restful是一種應用程序架構風格。核心理念是,將網絡上的一切事物當做資源,以資源爲中心,使用AJAX之類的局部刷新技術,通過GET、POST、PUT、DELETE四種請求方法對資源進行調度,調度的結果返回的不再是HTML,而是數據!於是就成了我們口中常說的數據APi 。(包含個人看法,歡迎留言討論)
四種請求的作用:
請求方式 | 作用 |
---|---|
GET | 獲取資源 |
POST | 添加資源 |
PUT | 修改資源 |
DELETE | 刪除資源 |
2、使用方法
在flask中,是通過flask-restful這個插件來實現Restful架構的。所以第一步是安裝flask-restful
2.1 安裝flask-restful
pip install flask-restful
2.2 創建並管理資源類
資源類一般是項目中涉及的實體,實例如下,創建 用戶資源類:
- 創建
由於操作對象可能是多個或單個資源,所以一般建單數和複數兩個資源類。
新建UserApi.py文件
from flask_restful import Resource
#單個資源類,一般用於 獲取單個資源,修改資源、刪除資源等操作
class UserResource(Resource):
def get(self,id=None):
'''業務邏輯'''
return '結果信息或返回數據'
def put(self,id=None):
pass
def delete(self,id=None):
pass
#複數資源類,一般用於 獲取多個資源、添加資源等操作
class UsersResource(Resource):
def get(self):
pass
def post(self):
pass
- 管理
from flask_restful import Api
from APP.Api.UserApi import UserResource,UsersResource
api = Api()
#api初始化,app:當前應用對象
def init_api(app):
api.init_app(app=app)
'''添加資源,格式:(資源類,訪問規則,允許的請求方法)'''
api.add_resource(UserResource,'/users/<string:id>',methods=['GET','PUT','DELETE']) #單數資源類
api.add_resource(UsersResource,'/users/',methods=['GET','POST']) #複數資源類
2.3 輸入與輸出定製
- 輸入定製
通過reqparse對用戶輸入的數據進行定製,實例如下:
from flask_restful import reqparse
req = reqparse.RequestParser()
#輸入定製 格式: (屬性名,type=數據類型,required=是否必需,help=不符合要求時的提示信息)
req.add_argument('username',type=str,required=True,help='請輸入用戶名')
req.add_argument('password',type=str,required=True,help='請輸入密碼')
#用戶請求後,在對應請求方法中獲取數據
args = req.parse_args()
username = args.get('username')
password = args.get('password')
- 輸出定製
通過field 和 marshal_with裝飾器對返回的數據進行格式化定製,實例如下:
from flask_restful import fields, marshal_with
#輸出定製
user_field = {
#格式: '用戶看到的字段名稱':fields.字段類型
'user_id':fields.String(attribute='id'),
#attribute:數據表中的真正字段名稱
'username':fields.String(attribute='name'),
'pwd':fields.String(attribute='password'),
}
result_field = {
'returnStatus':fields.Integer,
#fields.List:列表 fields.Nested:關聯數據
'returnValue':fields.List(fields.Nested(user_field))
}
class UserResource(Resource):
@marshal_with(result_field) #裝飾器將數據與預定格式進行整合
def get(self,id=None):
users = User.query.all() #先用sqlalchemy創建用戶模型User
data = {
'returnStatus':200,
'returnValue':users
}
return data
3、總結
- Restful架構的使用,使資源的管理更爲清晰明瞭,便於後期維護
- 可見,使用Restful架構,後端接口全部返回的是數據,便於前後端分離
- 返回的數據自動轉爲JSON格式,便於前端解析
- 以上僅簡單介紹了flask-restful的基本用法,詳見:flask-restful使用手冊