【flask框架】——flask-restful風格

三鍋在深圳發表於2020-11-04

首先,安裝依賴包。幫助文件:中文文件官方文件

pip install flask-restful

1、基本使用

注意:類檢視return返回的資料為字典,底層會通過from flask_restful import output_json會自動將字典封裝成json物件返回。

# 在restful風格中想返回中文,需要取消ascii編碼的配置
app.config["RESTFUL_JSON"] = {"ensure_ascii": False}


# 1、建立元件物件
元件物件 = Api(app)

# 2、定義類檢視
class 自定義檢視類(Resource):

# 3、元件新增類檢視
元件物件.add_resource(檢視類, URL資源段)

1.2、類檢視的裝飾器使用

class DemoResource(Resource):
    # 方案1:給檢視類中所有方法新增裝飾器
    # decorator1先呼叫,但是後執行
    # method_decorators = [mydecorator1, mydecorator2]

    # 方案2:給指定函式新增指定的裝飾器
    method_decorators = {
        "get": [mydecorator1, mydecorator2],
        "post": [mydecorator2]

    }

    def get(self):
        return {"get": "get message"}

    def post(self):
        return {"post": "post body"}

1.3、請求引數的提取

location="請求物件的屬性" 
  • 屬性可以是:args(查詢字串) formjsonfilescookiesheaders
  • 是否必須傳遞,預設False,如果設定為True, 不傳遞會返回400

# 2.定義類檢視
class DemoResource(Resource):

    def get(self):
        # 1.建立解析物件
        parser = RequestParser()

        # 2.新增解析引數和規則
        # location="請求物件的屬性"  args form json files cookies headers
        # required: 預設False, 如果設定為True, 不傳遞會返回400
        parser.add_argument("name", required=True, location='json', type=regex(r'^1[3-9]\d{9}$'))

        # 3.開始解析,獲取解析結果
        ret = parser.parse_args()

        # 4.從解析結果中提取引數值
        name = ret.name
        # name = ret['name']

        return {'foo': 'get'}

1.4 序列化響應返回

方案一:marshal函式 來完成序列化處理

# 序列化規則
# 擴充:Nested:可轉換 字典型別屬性
user_dict = {
    'name': fields.String,
    'age': fields.Integer(default=18),
    'height': fields.Float,
    'list1': fields.List(fields.Integer),
    'dict1': {'gender': fields.Boolean}
}

# 2.定義類檢視  繼承Resource
class DemoResource(Resource):

    def get(self):
        # 建立模型物件
        user = Person()
        # 引數1:模型物件
        # 引數2:序列化規則字典
        return marshal(user, user_dict)

方案二:使用裝飾器marshal_with(序列化規則字典)

    method_decorators = {
        "get": [marshal_with(user_dict)]
    }

方案三:自定義將模型類物件轉換成字典的方法【推薦使用

    def to_dict(self):
        """
        將模型物件轉換成字典
        :return:
        """
        my_dict = {
            "name": self.name,
            "age": self.age,
            "height": self.height,
            "mylist": self.mylist,
            "mydict": self.mydict,
        }

        return my_dict

1.5 自定義json的響應格式

flask-restful 提供了api.representation()裝飾器方法, 允許開發者自定義返回的資料格式

1、重寫flask_restful裡面的output_json方法(增加需要定義的響應格式),封裝在一個工具檔案裡,方便以後呼叫。

在這裡插入圖片描述
2、使用
在這裡插入圖片描述
3、結果
在這裡插入圖片描述

相關文章