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

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

代码如下:

 # coding=utf-8

 from flask import request
from wtforms import Form
from OnlineClassroom.app.err.JsonValidateErr import JsonValidateErr # request data 基础验证器
class RequestBaseForm(Form):
# 解析请求参数
def __init__(self):
# todo 做个处理,如果请求进来的请求时form参数则else,如果是json则进行下列操作
if "application/json" in request.headers.get("Content-Type"):
data = request.get_json(silent=True)
args = request.args.to_dict()
super(RequestBaseForm, self).__init__(data=data, **args)
else:
# application/x-www-form-urlencoded or multipart/form-data
data = request.form.to_dict()
args = request.args.to_dict()
super(RequestBaseForm, self).__init__(data=data, **args) # 对验证错误的参数抛出异常
def validate_for_api(self):
valid = super(RequestBaseForm, self).validate()
if not valid:
# todo 这里做一个返回,code,msg,data 错误返回 ???
raise JsonValidateErr("field is require?") return self

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

form表单模型:

 # coding=utf-8

 from .JsonBaseValidate import RequestBaseForm
from wtforms import StringField,Form
from wtforms.validators import DataRequired,Length class Testform(RequestBaseForm):
username = StringField("username",validators=[DataRequired(),Length(min=2,max=20)])

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

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

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

这是form-data和form-urlencoded

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

  1. Flask处理前端POST过来的JSON数据

    POST JSON数据的JS代码: $.ajax({ url:'http://127.0.0.1:5000/calc', type : 'post', dataType:'json', headers ...

  2. 修改后台传过来的json数据中对象的属性

    前言 今天在实习中遇到的一个小问题,后端传过来的一个json数据结构,但是对象中的属性名跟我需要的不一样(因为我是渲染echarts中的数据,属性名要一样) 这是后台传过来的数据: 需求是我需要把属性 ...

  3. 五、Delphi10.3通过REST单元使类和JSON数据互相转换

    一.我们定义一个简单的类 TPeople = class private FName: string; FScore: Integer; FAge: TDateTime; public propert ...

  4. Easyui Form增加myLoad方法,使其支持二级数据对象

    $.extend($.fn.form.methods, { myLoad : function (jq, param) { return jq.each(function () { load(this ...

  5. FlashChart json数据配置 中文文档

    http://www.riaos.com/ria/2274 FlashChart json数据配置说明 有朋友要用flashchart,感觉这个还不错.就整理了一份文档. 基本包括了所有json配置的 ...

  6. 使ApacheBench支持multi-url

    目录 1.下载Apache httpd相关源码包以及针对ab工具的patch包 2.编译安装apr 3.编译安装apr-util 4.替换httpd源码里面的ab.c文件 5.编译安装httpd 6. ...

  7. 修改sqlarchemy源码使其支持jdbc连接mysql

    注意:本文不会将所有完整源码贴出,只是将具体的思路以及部分源码贴出,需要感兴趣的读者自己实验然后实现吆. 缘起 公司最近的项目需要将之前的部分业务的数据库连接方式改为jdbc,但由于之前的项目都使用s ...

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

    关于Struts-JSON的提高开发效率 一.JSON是什么? :JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写,同时也易于机器解 析和 ...

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

    接着上节,我们通过jsonify返回json数据非常方便 ... return jsonify({"code": 400, "message": message ...

随机推荐

  1. Python||NameError: name 'reload' is not defined

    多半是运行如下代码时报错: import sysreload(sys)sys.setdefaultencoding("utf-8")123这段代码是为了解决Python中中文输出出 ...

  2. String的compareTo用法

    String的compareTo其实就是依次比较两个字符串ASC码.如果两个字符的ASC码相等则继续后续比较,否则直接返回两个ASC的差值.如果两个字符串完全一样,则返回0.来看一下代码. publi ...

  3. 响应式WEB页面开发实践

    转自:https://github.com/markyun/My-blog/issues/27 最近得到一个新任务单,让我用一套页面适应所有主流终端(Android.iPhone.iPad.PC),而 ...

  4. Jacoco代码覆盖率工具

    https://www.cnblogs.com/fnng/p/7923314.html https://my.oschina.net/wangmengjun/blog/974067

  5. 基于Springboot注解的策略模式

    释义 策略模式和多态很相似 可以理解为定义了一个统一的接口,有许多不同的实现类,可以自由选择不同的实时类去执行. 实现 上代码: 定义一个统一的接口: [JavaScript] 纯文本查看 复制代码 ...

  6. python的列表list和集合set操作

    以下是一些python的list和set的基本操作 1.list的一些操作 list = [1, 2, 3] list.append(5) print(list) list.extend([7, 8] ...

  7. 吴裕雄--天生自然 R语言开发学习:高级数据管理(续三)

    #-----------------------------------# # R in Action (2nd ed): Chapter 5 # # Advanced data management ...

  8. 双股同时上市!小米IPO是想要玩场大的?

    ​近日,据相关媒体报道,有相关人士称小米IPO最终可能敲定A+H股两地发行.但目前还未得到小米官方证实.此前关于小米要上市的消息已经流传已久了,从雷军刚开始的矢口否认到后来的默认,再到后来相关消息愈来 ...

  9. Luogu_2876_[USACO07JAN]解决问题Problem Solving

    题目描述 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地说,他们有\(P(1 \leq P \leq 300)\)道题目要做. 他们还离开了农场并且象普通人一 ...

  10. 机器学习入门 - 逻辑(Logistic)回归(5)

    原文地址:http://www.bugingcode.com/machine_learning/ex7.html 把所有的问题都转换为程序问题,可以通过程序来就问题进行求解了. 这里的模拟问题来之于C ...