32、Flask实战第32天:优化json数据的返回
接着上节,我们通过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数据的返回的更多相关文章
- 【Spring学习笔记-MVC-5】利用spring MVC框架,实现ajax异步请求以及json数据的返回
作者:ssslinppp 时间:2015年5月26日 15:32:51 1. 摘要 本文讲解如何利用spring MVC框架,实现ajax异步请求以及json数据的返回. Spring MV ...
- SpringBoot入门篇--对于JSON数据的返回以及处理一
在后台的开发过程中不可避免的就是一系列对JSON数据的返回,需要我们进行的就是提供各种各样的数据.一般情况下数据类型最常用的就是JSON以及XML,在这里我们就讲讲在SpringBoot里面我们怎样进 ...
- JSONArray ja = JSONArray.fromObject(list);//特殊类 用于将list转化为JSON 数据并返回 out.print(ja);
JSONArray ja = JSONArray.fromObject(list);//特殊类 用于将list转化为JSON 数据并返回out.print(ja);
- Flask实战第6天:视图函数Response返回值
视图函数的返回值会被自动转换为一个响应对象,Flask的转换逻辑如下: 如果返回的是一个合法的响应对象,则直接返回 可以使用make_response函数来创建Response对象,这个方法可以设置额 ...
- 6、Flask实战第6天:视图函数Response返回值
视图函数的返回值会被自动转换为一个响应对象,Flask的转换逻辑如下: 如果返回的是一个合法的响应对象,则直接返回 可以使用make_response函数来创建Response对象,这个方法可以设置额 ...
- Flask处理前端POST过来的JSON数据
POST JSON数据的JS代码: $.ajax({ url:'http://127.0.0.1:5000/calc', type : 'post', dataType:'json', headers ...
- 【转】AJAX中JSON数据的返回处理问题
AJAX处理复杂数据时,便会使用JSON格式.常用在对数据库的数据查询上.在数据库查询到数据后,便可在处理页面直接将数据转为JSON格式,然后返回. 本篇主要讨论:jQuery中,JSON数据在AJA ...
- SpringBoot入门篇--对于JSON数据的返回以及处理二
我们在进行开发的过程的难免会进行对象的返回,比如一个用户对象User,以及一个集合list,Map等等.在这篇博客中我们就是需要学习一下怎么对一个对象中某些属性的处理.需要补充的一点就是SpringB ...
- flask修改flask_wtf使其支持json数据的validation验证
flask默认是前后端不分离策略,前端通过flask+wtf表单来传递post,put...等数据. 现在前后端分离是趋势,那么对flask进行一定的修改,变为前后端分离,在前端页面中请求后端,那么请 ...
随机推荐
- 通过.NET客户端异步调用Web API(C#)
在学习Web API的基础课程 Calling a Web API From a .NET Client (C#) 中,作者介绍了如何客户端调用WEB API,并给了示例代码. 但是,那些代码并不是非 ...
- [CodeChef - GERALD07 ] Chef and Graph Queries
Read problems statements in Mandarin Chineseand Russian. Problem Statement Chef has a undirected gra ...
- 【BZOJ】1607: [Usaco2008 Dec]Patting Heads 轻拍牛头
[算法]模拟 #include<cstdio> #include<algorithm> using namespace std; ,maxm=; int a[maxn],A[m ...
- 【51NOD-0】1118 机器人走方格
[算法]DP #include<cstdio> #include<algorithm> using namespace std; ,maxn=; int f[maxn][max ...
- 【51NOD-0】1081 子段求和
[算法]树状数组(区间和) [题解]记得开long long #include<cstdio> #include<cstring> #include<algorithm& ...
- hdu1002 A + B Problem II(大数题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1002 A + B Problem II Time Limit: 2000/1000 MS (Java/ ...
- Java多线程学习(三)volatile关键字
转载请备注地址:https://blog.csdn.net/qq_34337272/article/details/79680693 系列文章传送门: Java多线程学习(一)Java多线程入门 Ja ...
- python中的ftplib模块
前言 Python中默认安装的ftplib模块定义了FTP类. ftplib模块相关参数: 加载ftp模块:from ftplib import FTP ftp = FTP()#设置变量ftp.set ...
- python基础===如何优雅的写代码(转自网络)
本文是Raymond Hettinger在2013年美国PyCon演讲的笔记(视频, 幻灯片). 示例代码和引用的语录都来自Raymond的演讲.这是我按我的理解整理出来的,希望你们理解起来跟我一样顺 ...
- 关于c++的string的operator =
在 c++ primer 5 中在说到string的章节里面有这样一句话: string s5 = "hiya"; // copy initialization 也就是说,这里说上 ...