python中利用swagger:Flasgger注释做post接口传入参数校验

利用swagger做校验参数:

1、首先是要在定义请求函数前面加一个这样的修饰器@swagger.validate('user_schema') #括号里面填入你用于校验参数的swagger注释schema

@swagger.validate('user_schema')  
 def post(self):

2、第二就是要在swagger注释里面的schema中的每一层定义的参数都要加required:这个属性,例如:
在这里插入图片描述
完整这两个步骤,你发送post请求的时候,就会调用swagger里的注释进行校验你传入的参数了。

演示:

1、缺少参数id_two时候:
在这里插入图片描述
2、输入的参数name格式不对的时候:
在这里插入图片描述
以上这两种情况:缺啥参数和参数格式不正确,都是可以校验出来,并且返回说明相应的出错信息。

完整代码

import flask, json
from flask import request,Flask,Blueprint
from flask_restful import Resource
import flask_restful
from flasgger import Swagger,swag_from

server = Flask(__name__)  # 创建一个服务,把当前这个python文件当做一个服务
swagger=Swagger(server)

class data_get(Resource):  # 返回data
    def get(self):

        data = {
            'User': {
                'id': '66',
                'name': '李华'
            }
        }
        return data

class data_post(Resource):
    @swagger.validate('user_schema')  #括号里面填入你用于校验参数的swagger注释schema
    #@swag_from('a.yml', validation=True)
    def post(self):
        """
        接口名称
        ---
        tags:
         -  用户相关接口
        parameters:
          - name: 接口主体
          - in: body
            schema:
              id: user_schema
              required:
                  - name
                  - id
              properties:
                  name:
                      type: string
                      description: 值为张三
                      example: 张三
                      enum: [张三,李四]
                  id:
                      required:
                          - id_one
                          - id_two
                      properties:
                          id_one:
                              type: array
                              example: [1,2,3]
                              exception: id_one
                          id_two:
                              type: array
                              example: [1,2,3]
                              exception: id_two
        responses:
         301:
             id: user_responses
             properties:
                   success:
                         description:  成功为true,失败为false
                         type: string
                         example: true
                   msg:
                         type: string
                         example: ""
        """
        a = swagger.get_schema('user_schema')
        print(a)
        r = request.data
        da = json.loads(r)
        print(da)
        return da


admin = Blueprint('admin',__name__)  #创建一个蓝图admin
api=flask_restful.Api(admin,catch_all_404s=True)  #蓝图充当服务器server角色
api.add_resource(data_get,'/data/get')
api.add_resource(data_post,'/data/post')


if __name__ == '__main__':
    server.register_blueprint(admin) #在服务器server上注册蓝图admin
    server.run(host='0.0.0.0',port=1362,debug=True)  # 指定访问端口、host

参考文章:https://github.com/qjw/flasgger
https://github.com/flasgger/flasgger/blob/master/README.zh.md

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Swagger3 的 `oneOf` 关键字用于定义一个对象可以具有多个属性的一个。在参数校验方面,需要使用组合关键字 `anyOf` 来完成。 具体实现步骤如下: 1. 在 `parameters` 定义一个 `schema` 对象,并在其使用 `anyOf` 关键字以及多个 `properties` 对象。示例如下: ``` parameters: - in: body name: requestBody required: true schema: anyOf: - $ref: '#/components/schemas/Property1' - $ref: '#/components/schemas/Property2' ``` 2. 在 `components` 定义多个 `schemas` 对象,分别对应 `anyOf` 的每个 `properties` 对象。示例如下: ``` components: schemas: Property1: type: object properties: prop1: type: string maxLength: 10 Property2: type: object properties: prop2: type: integer maximum: 100 ``` 注意:对每个 `properties` 对象进行参数校验时,需要在其添加相应的参数校验规则,例如 `maxLength` 和 `maximum`。 这样就完成了使用 `oneOf` 进行参数校验的实现。 ### 回答2: Swagger 3 是一个流行的 API 文档规范和工具,而 "oneof" 是一个用于定义参数的关键字。在 Swagger 3 ,可以使用一些技巧来进行参数校验。 首先,我们需要在 Swagger 3 的定义文件使用 "oneof" 关键字来定义参数。这样可以确保参数的取值只能是定义的一个。 例如,假设我们有一个接口需要传入一个身份类型的参数,可以是 "学生" 或者 "教师"。我们可以在 Swagger 3 定义文件,使用 "oneof" 关键字来定义该参数: ```yaml paths: /api/something: post: parameters: - name: identity in: query required: true schema: oneOf: - type: string enum: - 学生 - type: string enum: - 教师 ``` 上面的例子,我们使用了 "oneOf" 嵌套了两个枚举类型的参数。这样,在调用该接口时,只能选择其一个身份类型。 接下来,在服务器端代码,我们可以通过检查参数的取值来进行校验。例如,我们可以使用以下伪代码: ```python def handle_request(identity): if identity == "学生": # 处理学生参数 elif identity == "教师": # 处理教师参数 else: # 参数错误,返回错误信息 ``` 通过以上方法,我们可以轻松实现 Swagger 3 参数校验。 需要注意的是,由于 Swagger 3 只是一个 API 规范和工具,实际的参数校验逻辑需要在服务器端代码实现。 ### 回答3: 在 Swagger 3 ,我们可以使用 `oneOf` 关键字来定义一个参数的多种可能取值。在进行参数校验时,我们可以使用一些针对 `oneOf` 的校验规则。 首先,我们需要在 Swagger 规范定义 `oneOf` 的内容。例如,假设我们有一个参数 `status`,它可以是 "active" 或 "inactive"。我们可以使用以下代码定义它的取值范围: ``` parameters: - name: status in: query schema: oneOf: - type: string enum: - active - type: string enum: - inactive ``` 通过上述定义,我们限定了 `status` 参数的取值范围为 "active" 或 "inactive"。当我们输入其他值时,Swagger 将会进行参数校验并返回相应的错误信息。 另外,我们还可以使用一些自定义的校验规则来对参数进行详细的校验。例如,我们可以通过正则表达式对参数进行进一步的限制。示例如下: ``` parameters: - name: status in: query schema: oneOf: - type: string pattern: ^(active|inactive)$ ``` 通过上述定义,Swagger 将会对 `status` 参数进行正则表达式的校验,只允许值为 "active" 或 "inactive"。当我们输入其他值时,Swagger 将会返回相应的错误信息。 总结起来,Swagger 3 的 `oneOf` 可以帮助我们定义一个参数的多种可能取值范围,并可以通过自定义的校验规则对参数进行进一步的限制和校验
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值