码迷,mamicode.com
首页 > Web开发 > 详细

32、Flask实战第32天:优化json数据的返回

时间:2018-08-07 22:56:08      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:登录   自己   restful   pos   实战   ora   form   状态   code   

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

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

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

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

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

状态码的规范

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

 

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

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

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

from flask import jsonify


class HttpCode(object):
    ok = 200,
    unauth_error = 401
    param_error = 400
    server_error = 500

def resetful_result(code, message, data):
    return jsonify({"code": code, "message": message, "data":data or {}})

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

from utils import restful
...
return restful.resetful_result(code=200, message=‘‘, data={})

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

from flask import jsonify


class HttpCode(object):
    ok = 200,
    unauth_error = 401
    param_error = 400
    server_error = 500


def resetful_result(code, message, data):
    return jsonify({"code": code, "message": message, "data":data or {}})

def success(message="", data=None):
    return resetful_result(code=HttpCode.ok, message=message, data=data)

def unauth_error(message="", data=None):
    return resetful_result(code=HttpCode.param_error, message=message, data=data)

def param_error(message="", data=None):
    return resetful_result(code=HttpCode.param_error, message=message, data=data)

def server_error(message="", data=None):
    return resetful_result(code=HttpCode.server_error, message=message, data=data)

 

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

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

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

from utils import restful
...

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 restful.success()  #可以什么都不传
            else:
                return restful.unauth_error(原密码错误)  #只第一个参数message
        else:
            message = resetpwd_form.get_error()
            return restful.param_error(message)  #只第一个参数message

技术分享图片

 

32、Flask实战第32天:优化json数据的返回

标签:登录   自己   restful   pos   实战   ora   form   状态   code   

原文地址:https://www.cnblogs.com/sellsa/p/9439908.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!