接着上节,我们通过jsonify返回json数据非常方便

...
return jsonify({"code": 400, "message": message})

返回什么数据则是公司接口编写的规范

返回值的规范(就算值为空,我们也必须返回以下字段)

{
"code": 200, #状态码
"message": "", #信息提示
"data": {}, #返回的数据,比如文章列表等等
}

状态码的规范

200:成功
401:没有授权
400:参数错误
405:方法错误
500:服务器错误

前面,我们每一次返回json数据需要写一串"jsonify({"code": 400, "message": message})"这样很麻烦,项目后期可能还有很多地方需要返回json。因此我们可以把它抽取出来进行封装成一个工具

1、先在项目下面建一个python package命名为utils(工具包,以后项目的工具都写在这里面)

2、在utils.py下新建xjson.py

from flask import  jsonify

class StatusCode(object):
ok = 200
paramserror = 400
unauth = 401
methoderror = 405
servererror = 500 def json_result(code, message, data):
return jsonify({"code": code, "message":message, "data":data or {}})

这样,我们就可以在视图返回json的时候这样用:

from utils import xjson
...
return xjson.json_result(code=200, message='', data={})

但是这样依然不够方便,我们还是需要加上3个参数。因此我们继续改造xjson.py

from flask import  jsonify

class StatusCode(object):
ok = 200
paramserror = 400
unauth = 401
methoderror = 405
servererror = 500 def json_result(code, message, data):
return jsonify({"code": code, "message":message, "data":data or {}}) def json_success(message='', data=None):
return json_result(code=StatusCode.ok, message=message, data=data) def json_params_error(message='', data=None):
"""
请求参数错误
"""
return json_result(code=StatusCode.paramserror, message=message, data=data) def json_unauth_error(message='', data=None):
"""
没有权限访问
"""
return json_result(code=StatusCode.unauth, message=message, data=data) def json_method_error(message='', data=None):
"""
请求方法错误
"""
return json_result(code=StatusCode.methoderror, message=message, data=data) def json_server_error(message='', data=None):
"""
服务器内部错误
"""
return json_result(code=StatusCode.servererror, message=message, data=data) 

这样,我们只要根据不同的情况使用定义好的函数就行了。

参数: code(已经不用自己传了),message(成功的状态下可以不传,默认为空),data(没有传此参数,也会自动为空字典))

把上节内容的代码,可以写成如下:

...
from utils import xjson
from class ResetPwdView(views.MethodView):
decorators = [login_required]
def get(self):
return render_template('cms/cms_resetpwd.html') def post(self):
resetpwd_form = ResetPwdForm(request.form)
if resetpwd_form.validate():
oldpwd = resetpwd_form.oldpwd.data
newpwd = resetpwd_form.newpwd.data
user = g.cms_user
if user.check_password(oldpwd):
user.password = newpwd
db.session.commit()
return xjson.json_success('修改成功')
else:
return xjson.json_params_error('原密码错误')
else:
message = resetpwd_form.get_error()
return xjson.json_params_error(message)

32、Flask实战第32天:优化json数据的返回的更多相关文章

  1. 【Spring学习笔记-MVC-5】利用spring MVC框架,实现ajax异步请求以及json数据的返回

    作者:ssslinppp      时间:2015年5月26日 15:32:51 1. 摘要 本文讲解如何利用spring MVC框架,实现ajax异步请求以及json数据的返回. Spring MV ...

  2. SpringBoot入门篇--对于JSON数据的返回以及处理一

    在后台的开发过程中不可避免的就是一系列对JSON数据的返回,需要我们进行的就是提供各种各样的数据.一般情况下数据类型最常用的就是JSON以及XML,在这里我们就讲讲在SpringBoot里面我们怎样进 ...

  3. JSONArray ja = JSONArray.fromObject(list);//特殊类 用于将list转化为JSON 数据并返回 out.print(ja);

    JSONArray ja = JSONArray.fromObject(list);//特殊类 用于将list转化为JSON 数据并返回out.print(ja);

  4. Flask实战第6天:视图函数Response返回值

    视图函数的返回值会被自动转换为一个响应对象,Flask的转换逻辑如下: 如果返回的是一个合法的响应对象,则直接返回 可以使用make_response函数来创建Response对象,这个方法可以设置额 ...

  5. 6、Flask实战第6天:视图函数Response返回值

    视图函数的返回值会被自动转换为一个响应对象,Flask的转换逻辑如下: 如果返回的是一个合法的响应对象,则直接返回 可以使用make_response函数来创建Response对象,这个方法可以设置额 ...

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

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

  7. 【转】AJAX中JSON数据的返回处理问题

    AJAX处理复杂数据时,便会使用JSON格式.常用在对数据库的数据查询上.在数据库查询到数据后,便可在处理页面直接将数据转为JSON格式,然后返回. 本篇主要讨论:jQuery中,JSON数据在AJA ...

  8. SpringBoot入门篇--对于JSON数据的返回以及处理二

    我们在进行开发的过程的难免会进行对象的返回,比如一个用户对象User,以及一个集合list,Map等等.在这篇博客中我们就是需要学习一下怎么对一个对象中某些属性的处理.需要补充的一点就是SpringB ...

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

    flask默认是前后端不分离策略,前端通过flask+wtf表单来传递post,put...等数据. 现在前后端分离是趋势,那么对flask进行一定的修改,变为前后端分离,在前端页面中请求后端,那么请 ...

随机推荐

  1. 【C++对象模型】第一章 关于对象

    1.C/C++区别 C++较之C的最大区别,无疑在于面向对象,C程序中程序性地使用全局数据.而C++采用ADT(abstract data tpye)或class hierarchy的数据封装.类相较 ...

  2. wcf 服务创建,配置,测试

    一.WCF创建: 常规的创建WCF服务是通过SOAP传输的,很多网站开发人员想放弃使用XML而使用JSON,这个时候可以参照:http://www.cnblogs.com/zhili/p/WCFRes ...

  3. Tomcat启动报错:org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalin

    Error starting ApplicationContext. To display the auto-configuration report re-run your application ...

  4. 【zoj3645】高斯消元求解普通线性方程

    题意: 给你一个方程组(含有12个方程),求(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11) 方程组的形式是一个二次方程组 (ai1-x1)^2 + (ai2-x2)^2 +( ...

  5. 【洛谷 P4008】 [NOI2003]文本编辑器 (Splay)

    题目链接 \(Splay\)先练到这吧(好像还有道毒瘤的维护数列诶,算了吧) 记录下光标的编号,维护就是\(Splay\)基操了. 另外数据有坑,数据是\(Windows\)下生成了,回车是'\n\r ...

  6. 一键前端代理,一行命令开启nginx容器,代理前端页面

    我们在前端开发的过程中,在对接口时候,往往需要跨域请求,那么及其简便的方法就是使用nginx反向代理,但是存在几点缺点 1.在新的一个项目下,我们需要找到安装nginx目录的nginx.conf文件并 ...

  7. 【Python学习】matplotlib的颜色

    matplotlib自带的颜色 seaborn的颜色 装了seaborn扩展的话,在字典seaborn.xkcd_rgb中包含所有的xkcd crowdsourced color names. 使用的 ...

  8. 【Windows使用笔记】Windows日常使用软件

    整理一些对于我来说日常使用的Windows软件. 排名不分先后,仅凭我想起来的顺序! 1 MadAppLauncher 这个对我来说非常需要了. 使用它可以快速启动日常常用的软件,非常快捷高效.一般来 ...

  9. uboot makefile构建分析

    前言 几年前分析过uboot的构建及启动过程,做了笔记,但最终没有转为文章.这次又有机会开发嵌入式产品了(之前一年多都是在搞x86 linux),看了下uboot的构建过程,觉得有必要写下整个分析过程 ...

  10. 【NOIP2016】补题

    今天突然想到自己居然还没把NOIP2016补完 简直是傻逼... 所以开始写 D1T1:模拟 D1T2:NOIP最难的一道题,首先求LCA 离线下,把观察员单独提出来 然后可以维护一个类似桶排序的东西 ...