Flask入门笔记-15_请求解析

Flask-RESTful 提供了RequestParser类,用来帮助我们检验和转换请求数据

  • name: 传递的参数名称
  • default: 给参数设置的默认值, 如果参数没有传递,会使用默认值
  • dest: 参数对应的属性名 默认属性名和参数名同名
  • required: 是否必要 默认为False
  • action: 默认为store, 不支持多值参数; 设置append则支持多值参数
  • type: 指定参数转换的类型 int/str 内置函数(inputs.py) 自定义函数
  • ignore: 格式转换失败后是否忽略报错 默认为False
  • location: 设置参数的提取的位置 可选args/form/files/json/headers/cookies
  • choices: 限定参数值的范围
  • help: 设置自定义的错误提示
  • case_sensitive: 是否忽略大小写 默认不忽略
  • store_missing: 配合default使用的, 默认为True, 默认值才可以被获取
  • trim: 是否除去参数两端的空格
  • nullable: 参数是否可为null
from flask import Flask
from flask_restful import Resource, Api, reqparse
from flask_restful.inputs import *

app = Flask(__name__)
api = Api(app)

# 自定义一个规则
def func1(arg): # 必须定义形参来接收参数
    if re.match('^1',arg): # 必须以'1'开头
        return arg
    return ValueError("username is a invalid value")

class demo(Resource):
    def get(self):

        # 1. 创建解析器
        parser = reqparse.RequestParser()

        # 2. 添加参数解析规则, 参数d偶会用于构建Argument类型的对象
        # parser.add_argument('username', dest='name', required=True, action='append') # 是否支持一键多值
        # parser.add_argument('age', default=30) # 设置默认至
        # parser.add_argument('username',required=True,help='这个是必传的哦')
        # parser.add_argument('username',ignore=True,type=int) # 自动转换类型 int
        # parser.add_argument('username',type=boolean) # true/false 1/0 自动转换类型 bool
        # parser.add_argument('username',type=date)  # 2019-06-01 自动转换类型 datetime
        # parser.add_argument('username',type=datetime_from_iso8601) # 2012-01-01T23:30:00+02:00 自动转换类型 datetime
        # parser.add_argument('username',type=int_range(5,9))# 限定数值的范围 自动转换类型 int
        # parser.add_argument('username',type=natural)# 转换为自然数,类型int
        # parser.add_argument('username',type=regex('^1[3-9]\d{9}$'))# 按照正则匹配转换
        # parser.add_argument('username',type=url)    # http://www.zhihu.com
        # parser.add_argument("username", type=func1, ignore=True) # 使用自定义函数
        # parser.add_argument('username', location='cookies')  # 读取cookie中的数据
        # parser.add_argument("username", location='files')  # 读取出来的是FileStorage对象
        parser.add_argument('username', choices=('zs', 'ww'), help="username参数错误")  # 取值范围限定 'zs', 'ww'

        # 3. 执行解析 (从查询字符串/post表单/json中查询), 如果解析失败返回 400
        args = parser.parse_args()

        # 4. 取出参数
        print(args.username)
        print(type(args.username))

        # print(args.age)
        # print(type(args.age))

        return {'demo':'{}'.format(args.username)}

# 添加路由
api.add_resource(demo, '/')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port='8000')