flask_restful官方文档 https://flask-restful.readthedocs.io/en/latest/index.html
请求传参reqparse
reqparse模块是用来限定request中的参数的合法性的。类似于wtform
from flask import Flask from flask_restful import abort, Resource, Api, reqparse app = Flask(__name__) api = Api(app) parser = reqparse.RequestParser() parser.add_argument('task_id', type=int, default=23, help='任务的id', required=True) # default,默认为None如果不传参数的话,默认使用default # required,默认为False.该参数是否必须传 # help 该参数默认为None,如果前端传递的参数是非法的,help对应的值就会作为该参数对应的值出现在结果中,{message: {task_id: "任务的id"}}, # 该参数默认默认行为是返回类型错误本身的信息。 class Todo(Resource): def get(self): task_id = parser.parse_args()['task_id'] #parser.parse_args返回的是一个字典 return {'任务ID': task_id} api.add_resource(Todo, '/') if __name__ == '__main__': app.run(debug=True)
关于action这个参数,如果你要接受一个键有多个值的话,你可以传入action='append'.
parser.add_argument('name', type=str, action='append')
前端要这样访问
curl http://api.example.com -d "Name=bob" -d "Name=sue" -d "Name=joe"
你得到的参数将会像这样
args = parser.parse_args() args['name'] # ['bob', 'sue', 'joe']
parser.parse_args()
parser.parse_args返回的是一个key,value形式的字典
parser.parse_args(strict=True) # strict 默认为False,如果你不希望前端传入别的参数就把strict设为TRUE,前端传回别的参数将会跑出异常
控制输出字段marshal和marshal_with
又是我们从数据库中得到的数据,并不想把全部的属性展示,想只展示一部分属性。这时候就用到了
marshal函数:该函数用来指定显示对象的属性。
from flask_restful import fields, marshal >>> data = { 'a': 100, 'b': 'foo' } >>> mfields = { 'a': fields.Raw } >>> marshal(data, mfields) OrderedDict([('a', 100)]) >>> marshal(data, mfields, envelope='我是键') #envelope用于指定OrderedDict所对应的键 OrderedDict([('我是键', OrderedDict([('a', 100)]))])
marshal对应的装饰器为:marshal_with()
from flask import Flask from flask_restful import abort, Resource, Api, reqparse,marshal_with,fields app = Flask(__name__) api = Api(app) parser = reqparse.RequestParser() parser.add_argument('task_id', type=int, default=23, required=True,trim=True) #trim是否去掉啊前后空格 class Helloworld(Resource): resource_fields = { 'usename':fields.String, 'age':fields.Integer } @marshal_with(resource_fields) def get(self): task_id = parser.parse_args()['task_id'] user = { 'usename': '你好', 'age': 13, "aage":34 } return user api.add_resource(Helloworld, '/') if __name__ == '__main__': app.run(debug=True)
结果
{ "usename": "你好", "age": 13 }
参数:location
默认reqparse.RequestParser()是从request.values和request.json中解析数据,使用location参数可以指定拿参数的位置,比如从form中,从args中从headers中
# Look only in the POST body parser.add_argument('name', type=int, location='form') # Look only in the querystring parser.add_argument('PageSize', type=int, location='args') # From the request headers parser.add_argument('User-Agent', location='headers') # From http cookies parser.add_argument('session_id', location='cookies') # From file uploads parser.add_argument('picture', type=werkzeug.datastructures.FileStorage, location='files')
浙公网安备 33010602011771号