安装
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