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')

 

 

 

 

posted on 2019-08-05 16:48  程序员一学徒  阅读(168)  评论(0)    收藏  举报