flask-restful的请求功能
1.请求解析
flask-restful 解析的功能:
- 参数解析 RequestParser
- 序列化 marshal函数
- RequestParser 负责请求解析工作, 基本步骤如下:
1.创建请求解析器
请求解析器 = RequestParser()
2.添加参数规则
请求解析器.add_argument(参数名, 参数规则..)
3.执行解析
参数对象 = 请求解析器.parse_args()
4.获取参数
参数对象.参数名
示例代码:
from flask import Flask
from flask_restful import Resource, Api
from flask_restful.reqparse import RequestParser
app = Flask(__name__)
api = Api(app)
class DemoResource(Resource):
def get(self):
# 1.创建请求解析器
parser = RequestParser()
# 2.添加参数规则
parser.add_argument('name')
parser.add_argument('age')
# 3.执行解析 默认会从 查询字符串/post键值对/post-json数据 进行参数提取
args = parser.parse_args()
# 4.获取参数
print(args.name)
print(args.age)
return {'foo': "get"}
api.add_resource(DemoResource, '/')
if __name__ == '__main__':
app.run(debug=True)
2.常用参数
代码示例:
- default & required & location参数
from flask import Flask
from flask_restful import Resource, Api
from flask_restful.reqparse import RequestParser
app = Flask(__name__)
api = Api(app)
class DemoResource(Resource):
def post(self):
parser = RequestParser()
parser.add_argument('name', required=True, location='json')
parser.add_argument('age', default=10)
args = parser.parse_args()
print(args.name)
print(args.age)
return {'foo': "post"}
api.add_resource(DemoResource, '/')
if __name__ == '__main__':
app.run(debug=True)
- type参数
from flask import Flask
from flask_restful import Resource, Api
from flask_restful.reqparse import RequestParser
from flask_restful.inputs import *
app = Flask(__name__)
api = Api(app)
# 自定义函数进行参数校验和转换
def func1(value): # 必须定义形参来接收传递来的参数
if re.match(r'^user:', value):
return value[5:] # 转换完, 还需要将结果返回
else:
raise ValueError('age参数格式错误') # 校验失败, 会将错误信息以json形式返回
class DemoResource(Resource):
def put(self):
parser = RequestParser()
parser.add_argument('name')
# parser.add_argument('age', type=int) # 转为int类型
# parser.add_argument('age', type=boolean) # 转为bool类型 1/0 true/false
# parser.add_argument('age', type=date) # 日期 转为datetime类型 YYYY-mm-dd
# parser.add_argument('age', type=datetime_from_iso8601) # 时间 转为datetime类型 2012-01-01T23:30:00+02:00
# parser.add_argument('age', type=int_range(5, 10)) # 转为int类型 限定范围[5, 10]
# parser.add_argument('age', type=regex(r'^1[3-9]\d{9}$')) # 要求匹配正则
parser.add_argument('age', type=func1) # 自定义函数
args = parser.parse_args()
print(args.name)
print(args.age)
print(type(args.age))
return {'foo': 'put'}
api.add_resource(DemoResource, '/')
if __name__ == '__main__':
app.run(debug=True)