接着上节,我们通过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. ClassCastException: org.apache.tomcat.websocket.server.WsServerContainer cannot be cast to javax.websocket.server.ServerContainer

    21:09:22.221 [MessageBroker-3] INFO c.t.s.s.impl.StockNewsServiceImpl - [2017-12-16 21:09:22] execut ...

  2. 回顾一下MyBatis逆向工程——自动生成代码

    前言 最近做的项目(SSM+Shiro)的数据库表已经创建完成,一共有15张表,如果我们一个个去写pojo/bean的代码以及各种sql语句的话未免太过麻烦而且很容易出错,这个时候我们就需要MyBat ...

  3. [IOS]vmxsmc.exe已停止工作 VMware11 Unlocker for Mac OSX无法使用的解决办法.

    今天我帮同事安装VMware workstation12后发现之前的unlocker已经无法进行解锁了(就是VMware新建虚拟机无App Mac选项) 使用unlocker会出现vmsxmc.exe ...

  4. C++学习之路(五):复制构造函数与赋值运算符重载

    之前没有细想过两者的区别,今天对此进行简要记录,后续完善补充. 复制构造函数是在类对象被创建时调用的,但是赋值运算符是被已经存在的对象调用完成赋值操作. 复制构造函数只在对象实例化时才被调用,即在复制 ...

  5. python基础===成员访问__len__()和__getitem__()

    class A: def __init__(self,*args): self.name = arg pass def __len__(self): return len(self.name) a = ...

  6. xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance(xsi:schemaLocation详解)

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"中xsi的意思是 :本xml文件中要用到某些来自xsi代表的“http:/ ...

  7. 105.Construct Binary Tree from Preorder and Inorder Traversal---《剑指offer》面试6

    题目链接 题目大意:根据先序遍历和中序遍历构造二叉树. 法一:DFS.根据模拟步骤,直接从先序和中序数组中找值然后加入二叉树中,即先从先序数组中确定根结点,然后再去中序数组中确定左子树和右子树的长度, ...

  8. C11 标准特性研究

    前言 - 需要点开头 C11标准是C语言标准的第三版(2011年由ISO/IEC发布),前一个标准版本是C99标准. 相比C99,C11有哪些变化呢!!所有的测试全部基于能够和标准贴合的特性平台. 但 ...

  9. java的集合类面试题

    转自:https://yq.aliyun.com/articles/78788?spm=5176.8252056.759076.3.uFYrmt java.util包中包含了一系列重要的集合类,而对于 ...

  10. 如何在datepicker滚动完毕后触发事件去获得日期

    本来以为这件事情应该需要借助datepicker的委托来处理的,但是并没有找到此空间的委托. 其实最最简单的做法就是在IB中将次控件connect到一个Action上. 经过测试,当datepicke ...