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

news2024/12/23 11:08:14

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()

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

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 "The arguments is 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 应用请求

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/609756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一些忘了的东西(二)

Symbol出现的原因/作用 ①作为属性 避免属性冲突重复&#xff0c;就是使用它来表示唯一值; 问题是我们什么情况下 要保障属性一定不冲突重复 覆盖呢&#xff1f; 在vue里 有this.$ parent ,this.$ options ,this.$ set 这些&#xff0c;使用$命名开头就是想通过命名约定来减少…

BLIP使用教程

文章目录 准备测试示例一示例二&#xff1a; 结论源代码 原理篇&#xff1a; BLIP2-图像文本预训练论文解读 准备 如果无网络需提前下载相关模型 安装torch、transformers pip install torch trtransformers测试 测试blip基于图片生成文本描述能力&#xff08;Caption&…

《嵌入式系统》知识总结8:寄存器编程方式操纵GPIO

方式1&#xff1a; 查手册找到相关寄存器的地址&#xff0c;自行编写代码&#xff0c;定义指针指向该地址&#xff0c;并根据需要进行寄存器读写。 举例&#xff1a; //方式1举例&#xff1a;自定义GPIOB_ODR寄存器 #define GPIOB_ODR (*(volatile unsigned int *)0x40010C0…

Vivado时序约束基础

今天这篇博客&#xff0c;笔者向大家简单介绍Xilinx FPGA中的Vivado时序约束基础知识&#xff0c;也为后续的学习打好铺垫。 Xilinx Design Constraints (XDC) 概述 • XDC 在本质上就是Tcl 语言&#xff0c;但其仅支持基本的Tcl 语法&#xff0c;如变量、列表和运算符等等&a…

Go 语言基础

文章目录 Go 语言基础1. 程序基础2. 数据类型3. 字符串与复合数据类型4. 函数、方法、接口和反射5. 并发编程&#xff08;核心重点&#xff09;6. 包和代码测试7. 综合实战案例框架部分探索深度 Go 语言基础 1. 程序基础 了解常量和遍历【const var 关键词】 : 初始化以及赋值…

微服务如何治理

微服务远程调用可能有如下问题&#xff1a; 注册中心宕机&#xff1b; 服务提供者B有节点宕机&#xff1b; 服务消费者A和注册中心之间的网络不通&#xff1b; 服务提供者B和注册中心之间的网络不通&#xff1b; 服务消费者A和服务提供者B之间的网络不通&#xff1b; 服务提供者…

Redux And Redux Toolkit

笔记介绍了react_redux和redux_toolkit react_redux只介绍了原理图&#xff0c;为理解redux_toolkit做铺垫。 本笔记是对一下课程做的输出&#xff0c;若大家有不理解的地方&#xff0c;可看完课程后&#xff0c;再借助课程理解笔记内容&#xff0c;同时也鼓励大家对自己的听…

【环境搭建】40系一些奇奇怪怪的环境问题

【设备信息】我的设备是4070ti&#xff0c;支持cuda12.0,但是目前用的还是11.7 1&#xff09;fatal error: cusparse.h: No such file or directory 因为cuda版本和改名的原因&#xff0c;这个在cuda版本中比较有效的解决办法是&#xff1a; sudo apt search libcusparse得到…

matplotlib实操

matplotlib实操 问题1.分析离网用户的基本特征:包括但不限于地市、年龄、网龄、融合类型、套餐分布、用户价值等&#xff0c;年龄、网龄、用户价值(ARPU)、MOU、DOU;数据预处理处理异常值地市分布县级分布年龄分布网龄分布性别与年龄分布融合类型套餐分布用户价值(ARPU)MOU(每用…

vulnhub靶场之hackme2-DCHP

Burp联动xray 1.信息收集 探测存活主机&#xff0c;输入&#xff1a;netdiscover -r 192.168.239.0/24 &#xff0c;发现192.168.239.179存活。 对目标主机192.168.239.179进行端口扫描&#xff0c;发现存活22、80端口。 在浏览器上输入&#xff1a;http://192.168.239.179&a…

axios解决跨域问题

Vue3中使用axios访问聚合的天气API&#xff0c;出现跨域问题&#xff0c;需要在前端进行一些配置&#xff1a; 首先是修改vue.config.js&#xff1a; const { defineConfig } require(vue/cli-service) module.exports defineConfig({transpileDependencies: true,devServe…

vue2.0基础

文章目录 VUEVue2.0vue特点事件处理键盘事件计算属性监听watch深度监视绑定class样式条件渲染列表渲染列表过滤列表排序Vue.set()的使用Vue检测数组的原理Vue监测原理总结指令生命周期Vue componentVue配置文件vue.config.JS其他&#xff1a;组件自定义事件组件自定义事件解绑全…

【Mysql数据库从0到1】-入门基础篇--用户与权限管理

【Mysql数据库从0到1】-入门基础篇--用户与权限管理 &#x1f53b;一、Mysql 用户管理1.1 &#x1f343; Mysql服务器登录1.2 &#x1f343; 用户创建1.3 &#x1f343; 用户修改1.4 &#x1f343; 用户删除1.5 &#x1f343; 用户密码修改1.6 &#x1f343; 用户密码管理 &…

深入浅出C语言—【函数】上

目录 1.函数的概念 2.C语言函数的分类 2.1 库函数 2.1.1 strcpy库函数举例学习方式 2.1.2 库函数扩展知识 2.2 自定义函数 2.2.1求两个整数中的较大值 3. 函数的参数 3.1 实际参数&#xff08;实参&#xff09; 3.2 形式参数&#xff08;形参&#xff09; 4. 函数的…

Linux安全之账户安全

账户安全 Linux用户账户概述&#xff1a; 用户账号 超级用户root系统用户普通用户组账号 基本组&#xff08;私有组----每一个私有组里面只有一个用户&#xff09;附加组&#xff08;公共组----每一个用户都可以加入到这个组里面&#xff09; UID和GID&#xff1a; UID&…

【minio】Ubuntu安装MinIO文件服务器并通过C++上传下载

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍MinIO的使用。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习知识&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&…

pandas速学-DataFrame

一、理解DataFrame 他是一个表格结构&#xff1a;DataFrame 是一个表格型的数据结构 他是有序的&#xff0c;不同值类型&#xff1a;它含有一组有序的列&#xff0c;每列可以是不同的值类型&#xff08;数值、字符串、布尔型值&#xff09;。 他可以被看做一个由series组成的…

chatgpt赋能python:PythonIP匹配

Python IP匹配 随着互联网的不断发展&#xff0c;IP地址已成为人们最常使用的一种网络标识。在网络分析和开发中&#xff0c;经常会用到IP地址的相关操作&#xff0c;如IP地址的匹配。Python作为一种性能比较好的语言&#xff0c;也可以很好地完成IP地址的匹配工作。本文将介绍…

【学习日记2023.6.4】之 Linux入门

1. Linux简介 1.1 主流操作系统 不同领域的主流操作系统&#xff0c;主要分为以下这么几类&#xff1a; 桌面操作系统、服务器操作系统、移动设备操作系统、嵌入式操作系统。接下来&#xff0c;这几个领域中&#xff0c;代表性的操作系统是那些? 1). 桌面操作系统 操作系统特…

数据链路层:虚拟局域网(VLAN)

数据链路层&#xff1a;虚拟局域网&#xff08;VLAN&#xff09; 笔记来源&#xff1a; 湖科大教书匠&#xff1a;虚拟局域网&#xff08;VLAN&#xff09;概述 湖科大教书匠&#xff1a;虚拟局域网&#xff08;VLAN&#xff09;实现机制 声明&#xff1a;该学习笔记来自湖科大…