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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM