如何验证Flask中的参数

问题描述 投票:0回答:1

有没有办法验证 Flask 中的刺痛以检查以下内容。我希望它不仅出现在 Swagger 文档中,而且如果可能的话,还可以将其捕获为字符串验证错误

  1. 最小长度10
  2. 最大长度1,024
  3. [a-zA-Z]
  4. 开头
  5. 包含
    [a-zA-Z0-9=!@#$%^&*()-]
  6. [a-zA-z0-9]
  7. 结尾

这是到目前为止我如何设置端点的

from flask import Flask
from flask_restplus import Api, Resource, fields

flask_app= Flask (__name__)
app = Api(app = flask_app,
          version = "1.0",
          title = "Test API",
          description = "Example endpoint to test validation of POST body parameter using Flaskplus")

model = app.model (
    'username model',
    {
        'username': fields.String (
            required = True,
            description = "Username of the user",
            help = "Username cannot be blank, must be of length 10, can start with an upper or lower case letter, can contain upper/lower case, numbers, and the following special characters [=!@#$%^&*()-], and must end with an upper/lower case letter or a number",
            example = "john.smith123"
        )
    }
)

name_space = app.namespace ('', 'Main API')
@name_space.route ("/test")
class test (Resource)

    @app.doc(
        responses = {
            200: 'OK',
            400: 'Invalid Argument',
            500: 'Mapping Key Error'
        }
    )

    @app.expect (model)

    def post (self):
        try:
            username = request.json.get('username')


            return {
                'status': 'Username valid',
                'status_code': 200
            }
        except KeyError as e:
            name_space.abort (
            500,
            e.__doc__,
            status = "Key error",
            statusCode = "500"
            )
validation flask swagger documentation
1个回答
2
投票

您可以使用 flask-parameter-validation 项目来执行此操作。您将能够使用类似于以下内容的方法来实现它:

from flask_parameter_validation import ValidateParameters, Json

@name_space.route("/test", methods=["POST"])
@ValidateParameters()
def hello(
        username: str = Json(
            min_str_length=10,
            max_str_length=1024,
            pattern=r"REGEX"
        )
     ):
    return f"Hello, {username}"

您需要将 REGEX 替换为满足您的开始、中间和结束标准的正则表达式模式。

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.