接着上节,我们通过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. Strand Sort

    Strand sort是思路是这样的,它首先需要一个空的数组用来存放最终的输出结果,给它取个名字叫"有序数组" 然后每次遍历待排数组,得到一个"子有序数组",然 ...

  2. 省队集训Day1 睡觉困难综合征

    传送门:https://www.luogu.org/problem/show?pid=3613 [题解] 按二进制位分开,对于每一位,用“起床困难综合征”的方法贪心做. 写棵LCT,维护正反两种权值, ...

  3. C# 关于调用微信接口的代码

    调用微信接口前需要准备的内容. 1.微信公众平台的appid 2.微信公众平台的secret 3..获取tokenid 4.获取ticket 5.生成签名的随机串 6.生成签名的时间戳 7.生成签名 ...

  4. querySelector()与querySelectorAll()

    1.querySelector() 参数:css选择器 返回匹配指定css选择器元素的第一个子元素 2.querySelectorAll() 参数:css选择器 返回匹配指定css选择器的所有元素

  5. javascript中数据属性与访问器属性

    1.数据属性 Configurable:true|false,表示能否通过delete将属性删除,默认为true.当把属性的Configurable设置为false后,该属性不能通过delete删除, ...

  6. CentOS7修改默认运行级别

    新装了一个虚拟机,图形界面启动太慢,想调整一下按照以前的经验改运行级别,输入: vi /etc/inittab 然后发现跟之前不一样了,在inittab设置不再生效: # inittab is no ...

  7. 2017-2018-1 20179205《Linux内核原理与设计》第九周作业

    <Linux内核原理与设计>第九周作业 视频学习及代码分析 一.进程调度时机与进程的切换 不同类型的进程有不同的调度需求,第一种分类:I/O-bound 会频繁的进程I/O,通常会花费很多 ...

  8. perl6中的替换

    use v6; =begin pod perl6 中的替换用S/// S有几个可选参数: :g —(长形式::global)全局匹配:替换掉所有的出现 :i —不区分大小写的匹配 :ii —(长形式: ...

  9. FAN54015 充電電流 軟硬體設定

    Ex1: Vrsense 選 37.4 mV --- 在第二張圖 Rsense 選 50 mΩ --- 在第三張圖 37.4 / 50 = 748 mA Ex2: Vrsense 選 44.2 mV ...

  10. python爬虫模块之URL管理器模块

    URL管理器模块 一般是用来维护爬取的url和未爬取的url已经新添加的url的,如果队列中已经存在了当前爬取的url了就不需要再重复爬取了,另外防止造成一个死循环.举个例子 我爬www.baidu. ...