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