Restful架構在flask中的運用

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使用手冊
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章