前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flask 学习-74.Flask-RESTX 查询参数args 校验

Flask 学习-74.Flask-RESTX 查询参数args 校验

作者头像
上海-悠悠
发布2022-09-27 17:00:02
7170
发布2022-09-27 17:00:02
举报
文章被收录于专栏:从零开始学自动化测试

前言

通过api.model() 设置的模型,只能校验post请求的json格式,无法设置location参数校验get请求的查询参数

遇到的问题

当我访问一个分页查询地址/teacher?page=1&size=3 需要校验page和size只能是数字类型, 于是首先想到的是如下方式

代码语言:javascript
复制
query_model = api.model('QueryModel', {
    'page': fields.Integer(min=1, required=False, description='页数'),
    'size': fields.Integer(min=1, required=False, description='每页最大数')
})

@api.route('/teacher')
class TeacherView(Resource):

    @api.doc(description='查询')
    @api.expect(query_model, validate=True)
    def get(self):
        """查询全部"""
        api.logger.info(f"GET query查询参数: {request.args}")
        return {"msg": "succsss"}

会直接报400 BAD REQUEST,json解析错误:

代码语言:javascript
复制
{
    "message": "Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)"
}

api.model() 是从传过来的json格式中解析数据,因为get请求没有传json格式的参数,直接就格式错误了。 Flask-RESTX 还有一种请求参数校验方式 reqparse.RequestParser()

location 位置

reqparse.RequestParser() 校验请求参数,可以设置location 位置

代码语言:javascript
复制
# 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')

代码参考

代码语言:javascript
复制
# 解析get请求查询参数
page_parser = api.parser()
page_parser.add_argument(
    'page', type=int, default=1, location='args', help='page must be int'
)
page_parser.add_argument(
    'size', type=int, default=10, location='args', help='size must be int'
)

@api.route('/teacher')
class TeacherView(Resource):

    @api.doc(description='查询')
    @api.expect(page_parser, validate=True)
    def get(self):
        """查询全部"""
        args = page_parser.parse_args()
        api.logger.info(f"GET query查询参数: {args}")
        return {"msg": "succsss"}

或者使用flask_restx自带的reqparse.RequestParser()

代码语言:javascript
复制
from flask_restx import reqparse

page_parser = reqparse.RequestParser()
page_parser.add_argument(
    'page', type=int, default=1, location='args', help='page must be int'
)
page_parser.add_argument(
    'size', type=int, default=10, location='args', help='size must be int'
)

通过location='args'参数指定校验args 参数。

2022年第 12期《python接口web自动化+测试开发》课程,9月17号开学!

本期上课时间:2022年9月17号 - 2022年12月17号,周六周日上午9:00-11:00

报名费:报名费3000一人(周期3个月)

联系微信/QQ:283340479

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 遇到的问题
  • location 位置
    • 报名费:报名费3000一人(周期3个月)
      • 联系微信/QQ:283340479
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档