安裝
pip install flask-restful
使用
一個最小的flask-restful

from flask import Flask from flask_restful import Api,Resource from flask_restful.reqparse import RequestParser app = Flask(__name__) api = Api(app) class HelloWorld(Resource): def get(self): return {'hello': 'world'} def post(self): data ={ "msg":"post成功" } return data api.add_resource(HelloWorld, '/') if __name__ == '__main__': app.run(debug=True)
參數解析

from flask_restful import Resource from flask_restful.reqparse import RequestParser class ProfileListResource(Resource): def post(self): parser = RequestParser() parser.add_argument('username', type=str,location='json') parser.add_argument('pwd', type=str,location='json') parser.add_argument('data',type=list, location='json') parser.add_argument('data_dic',type=dict, location='json') args = parser.parse_args() print(args) print(type(args)) username = args.get("username") pwd = args.get("pwd") data = args.get("data") data_dic = args.get("data_dic") print(data_dic) print(type(data_dic)) return {"code_Post": 200}
add_argument可以指定這個字段的名字,這個字段的數據類型等。
- default:默認值,如果這個參數沒有值,那么將使用這個參數指定的值。
- required:是否必須。默認為False,如果設置為True,那么這個參數就必須提交上來。
- type:這個參數的數據類型,如果指定,那么將使用指定的數據類型來強制轉換提交上來的值。
- choices:選項。提交上來的值只有滿足這個選項中的值才符合驗證通過,否則驗證不通過。
- help:錯誤信息。如果驗證失敗后,將會使用這個參數指定的值作為錯誤信息。
- trim:是否要去掉前后的空格。
輸出字段
對於一個視圖函數,你可以指定好一些字段用於返回。以后可以使用ORM模型或者自定義的模型的時候,他會自動的獲取模型中的相應的字段,生成json數據,然后再返回給客戶端。這其中需要導入flask_restful.marshal_with裝飾器。並且需要寫一個字典,來指示需要返回的字段,以及該字段的數據類型。

from flask import Flask, render_template, url_for from flask_restful import Api, Resource, reqparse, inputs # reqparse 類似WTForms來驗證提交的數據是否合法 ,inputs驗證email,url等數據 from flask_restful import fields, marshal_with # fields用於輸出字段 marshal_with裝飾器關聯返回字段信息 app = Flask(__name__) # 用Api來綁定app api = Api(app) class ArticleView(Resource): # 類視圖不同於之前繼承View,這里需要繼承Resource resource_fields = { # 返回字段信息 'title': fields.String, 'content': fields.String, } @marshal_with(resource_fields) # 關聯返回字段信息 def get(self): return {'title': 'abcdefg'} api.add_resource(ArticleView, '/article/', endpoint='article') # 類視圖綁定 if __name__ == '__main__': app.run(debug=True)
完整flask項目結構
https://gitee.com/peter_zh/rgzn2003