接着上節,我們通過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)