• 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)

  • 相关阅读:
    通过Web启动本地应用程序
    类似百度文库文档预览方式实现
    cas4.0 session中返回更多的用户信息
    word转pdf图片问题
    JSON数据转换成table表格
    2017年各银行卡跨行取款收费标准
    解决win8/8.1系统安装.net framework 3.5出现0x800F0906代码错误
    更改Thunderbird的默认语言
    java获取客户端ip地址
    为jquery ajax请求增加正在运行提示
  • 原文地址:https://www.cnblogs.com/sellsa/p/9439908.html
Copyright © 2020-2023  润新知