Flask中使用Flask-WTF验证JSON对象参数

Flask中使用Flask-WTF验证JSON对象参数

1 安装

Flask-WTF是对WTForms库的扩展,默认只对”form“标签下的表单进行验证。针对当前前后端分离的项目中,json传输参数需要进行二次封装才能使用。

# 安装Flask-WTF包
pip install Flask-WTF

2 源代码

2.1 工程布局

在这里插入图片描述

2.2 实体类

request_form.py

# coding=utf-8

from flask import request
from wtforms import Form


# 自定义请求
class RequestForm(Form):
    # 初始化参数
    def __init__(self):
        # 获取 “application/json” 请求
        if "application/json" in request.headers.get("Content-Type"):
            data = request.get_json(silent=True)
            args = request.args.to_dict()
            super(RequestForm, self).__init__(data=data, **args)
        else:
            # 获取 “application/x-www-form-urlencoded” 或者 “multipart/form-data” 请求
            data = request.form.to_dict()
            args = request.args.to_dict()
            super(RequestForm, self).__init__(data=data, **args)

    def validate_arguments(self):
        # 验证参数
        valid = super(RequestForm, self).validate()

        # 验证参数失败
        if not valid:
            # 此处可以写错误返回值
            print("field is require")

        return self.validate()

    def arguments_error(self):
        return result(data=self.errors, code=400, msg="Parameter error")

test.py

from wtforms import StringField
from wtforms.validators import DataRequired, length

from entity.request_form import RequestForm


# TestForm表单
class TestForm(RequestForm):
    # 会自动生成标签
    # <input id="name" required type="text" value="参数值">
    name = StringField(validators=[DataRequired()])

    # 会自动生成标签
    # <input id="pwd" maxlength="12" minlength="6" name="pwd" required type="text" value="参数值">
    pwd = StringField(validators=[DataRequired(), length(min=6,max=12)])

    def get_name_data(self):
        return self.name.data

    def get_pwd_data(self):
        return self.pwd.data

result.py


import json

from flask import jsonify


def result(data: object = None, code: int = 200, msg: str = "success"):
    """
    Set the result of web
    :param data: It is data of status
    :param code: It is code of status
    :param msg: It is a message of status
    :return: dict
    """

    # 将对象转化为json字符串
    data_json_str = json.dumps(data, ensure_ascii=False, default=lambda obj: obj.__dict__)

    # 将json字符串转化为json字典
    data_json_dict = json.loads(data_json_str)

    # 设置返回值字典
    result_dict = {
        "code": code,
        "msg": msg,
        "data": data_json_dict
    }

    return jsonify(result_dict)

2.3 main.py

flask应用

from flask import Flask
from entity.test import TestForm

app = Flask(__name__)


@app.route("/", methods=['POST'])
def test():
    # 获取Form表单
    test_form = TestForm()

    if not test_form.validate_arguments():
        return test_form.arguments_error()

    print(test_form.get_name_data())
    print(test_form.get_pwd_data())

    return "Success"


if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)

3 应用请求

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值