flask修改flask_wtf使其支持json数据的validation验证

flask默认是前后端不分离策略,前端通过flask+wtf表单来传递post,put...等数据.

现在前后端分离是趋势,那么对flask进行一定的修改,变为前后端分离,在前端页面中请求后端,那么请求的格式那么必然会有使用json传递数据,然而flask_wtf默认只支持form表单,那么对改动支持json

代码如下:

 1 # coding=utf-8
 2
 3 from flask import request
 4 from wtforms import Form
 5 from OnlineClassroom.app.err.JsonValidateErr import JsonValidateErr
 6
 7
 8 # request data 基础验证器
 9 class RequestBaseForm(Form):
10     # 解析请求参数
11     def __init__(self):
12         # todo 做个处理,如果请求进来的请求时form参数则else,如果是json则进行下列操作
13         if "application/json" in request.headers.get("Content-Type"):
14             data = request.get_json(silent=True)
15             args = request.args.to_dict()
16             super(RequestBaseForm, self).__init__(data=data, **args)
17         else:
18             # application/x-www-form-urlencoded    or    multipart/form-data
19             data = request.form.to_dict()
20             args = request.args.to_dict()
21             super(RequestBaseForm, self).__init__(data=data, **args)
22
23     # 对验证错误的参数抛出异常
24     def validate_for_api(self):
25         valid = super(RequestBaseForm, self).validate()
26         if not valid:
27             # todo 这里做一个返回,code,msg,data 错误返回  ???
28             raise JsonValidateErr("field is require?")
29
30         return self

根据请求header中content-type来对数据解析,调用wtfforms的Form父类方法__init__将解析过后的参数给予父类的属性,其中自定义方法validate_for_api调用父类的验证方法validate()由父类来确定是否存在与准确

form表单模型:

1 # coding=utf-8
2
3 from .JsonBaseValidate import RequestBaseForm
4 from wtforms import StringField,Form
5 from wtforms.validators import DataRequired,Length
6
7 class Testform(RequestBaseForm):
8     username = StringField("username",validators=[DataRequired(),Length(min=2,max=20)])


一个简单的测试,路由代码如下:

1 @user.route("/index",methods=["GET","POST"])
2 def xx():
3     req = Testform()
4     type = request.headers.get("Content-Type")
5     if req.validate_for_api():
6         return "requset username.data {} >> request context-type {}".format(req.username.data,type)
7     return "request validate failds..."

这是json请求,不要忘记在header中将content-type的选项改为applocation/json

这是form-data和form-urlencoded

原文地址:https://www.cnblogs.com/zengxm/p/12406499.html

时间: 2024-10-08 17:32:35

flask修改flask_wtf使其支持json数据的validation验证的相关文章

[转] 关于Struts-JSON配置(详解带实例struts2的json数据支持)

关于Struts-JSON的提高开发效率 一.JSON是什么? :JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写,同时也易于机器解 析和生成.它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C , C#, Java, JavaScript, Perl, Python

支持XML和JSON数据的图表控件FusionCharts XT

FusionCharts XT是一款功能强大的图表控件,同时支持HTML5和Flash,可以用于PCs, Macs, iPads, iPhones ,支持XML和JSON数据,可以帮您为您的Web应用创建交互式的.数据驱动的图表.仪表盘和地图.它具有智能化.用户友好和创新等特点,可以将单调的数据转化为栩栩如生的图像,从而使您的Web应用更加的生动.它可以完美的应用于web应用软件.管理仪表板.分析学.展示和决策支持系统,可以与诸如ASP.ASP.NET.PHP.JSP.ColdFusion和Ru

32、Flask实战第32天:优化json数据的返回

接着上节,我们通过jsonify返回json数据非常方便 ... return jsonify({"code": 400, "message": message}) 返回什么数据则是公司接口编写的规范 返回值的规范(就算值为空,我们也必须返回以下字段) { "code": 200, #状态码 "message": "", #信息提示 "data": {}, #返回的数据,比如文章列表等等

MariaDB 10.0.X中,动态列支持 JSON 格式来获取数据。

MariaDB 10.0.X中,动态列(Dynamic Columns),可以支持 JSON 格式来获取数据. 为了兼容传统SQL语法,MariaDB 10和MySQL5.7支持原生JSON格式,即关系型数据库和文档型NoSQL数据库集于一身. 使用说明: ###表结构 create table assets (   item_name varchar(32) primary key, -- A common attribute for all items   dynamic_cols  blo

springMVC学习(11)-json数据交互和RESTful支持

一.json数据交互: json数据格式在接口调用中.html页面中较常用,json格式比较简单,解析还比较方便. 比如:webservice接口,传输json数据. springMVC进行json交互 1)环境准备: 加载json转换的jar包: springmvc中使用jackson的包进行json转换(@requestBody和@responseBody使用下边的包进行json转) jackson-core-asl-1.9.11.jar jackson-mapper-asl-1.9.11.

基于Bootstrap的JQuery TreeView树形控件,数据支持json字符串、list集合(MVC5)

BZ第一次自己写博客,心情好激动!!BZ也是小菜,本文如果有什么不对的地方,希望大神们多多指教,也希望和我一样的小菜多多学习.BZ在这里谢过各位. BZ最近看了很多博友的有关TreeView的博客,发现很多都是WebForm.JQuery的.因为BZ使用的是MVC的原因,所以决定写一写关于MVC和Bootstrap的TreeView. PS:基于Bootstrap的JQuery TreeView树形控件,JQuery版本为2.1.1(下载网上的基于Bootstrap的JQuery TreeVie

unity3d在Android端读取修改Json数据

首先我们需要下载一个文件 LitJson.dll(下载链接 ps: 是用自己的百度云盘下载的如果链接过时,请留言或自行下载, 密码: 5foa) 另外,由于我们要发布到安卓手机上,所以需要配置Jar和SDK,由于这里主要讲Json在安卓端的修改和读取,在这里就不细说了,当然如果不发布手机端的话,电脑端也是可以正常使用的 (1)首先我们来简单搭建一个测试环境(如图) 从上到下依次为text文本框, 按钮, 输入框, 按钮, 功能如图显示(如果需要的话可以把UI放大,以免在手机上面太小,或者在Gam

修改springmvc返回ajax方式的json数据

现在由这么一个需求,就是修改几个功能模块的springmvc的ajax请求返回值(对返回值加密), 因为controller很多,而且以前抱着开闭原则,这里就选择使用拦截器的方式(是Filter不是spring的handlerFilter).废话不多少,上代码.(原始controller里返回的都是json数据). 修改web.xml 添加filter <filter> <filter-name>jsonFilter</filter-name> <filter-c

Flask 框架 重定向,捕获异常,钩子方法及使用jsonify在网页返回json数据

Flask 框架中常用到重定向方法来实现路由的跳转 ,路由跳转又分为站内跳转和站外跳转 常用的站内跳转方法为url_for  而常用的站外跳转为redirect 在这里提示一下: 在使用两种方法是须调用相对应的包: redirect对应的为redirect包  而url_for对应url_for 例: 具体代码为: 捕获异常:即在服务器没有相应的时候用来进行友好提示,提高用户体验 具体代码为: 钩子方法:分为第一次请求之前,每一次请求之前和请求之后在后台返回的数据 jsonify:在页面返回js