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)

 

转载于:https://www.cnblogs.com/sellsa/p/9439908.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值