HttpException中get_body()调用的问题

来源:7-4 深入理解dict的机制

大野和我3326249

2018-12-25

老师, 您好,我自定义了一个继承与HTTPException的异常类, 实现为如下代码, 为了使对象可以转换为dict,增加了相关方法
这样做的目的是为了在服务器返回的JSON中加入自定义的信息

from werkzeug.exceptions import HTTPException
from flask import request


class APIException(HTTPException):

    code = 500
    msg = '对不起,发生了内部错误!'
    error_code = 999

    def __init__(self, code=None, error_code=None, msg=None):
        if code:
            self.code = code
        if error_code:
            self.error_code = error_code
        if msg:
            self.msg = msg

        self.key_items = ['error_code', 'msg', 'request']
        self.request = request.method + ' ' + self.get_url_no_param()
        super(APIException, self).__init__(msg, None)

    def get_body(self, environ=None):
        print(id(self))
        body = dict(self)
        import json
        text = json.dumps(body)
        return text

    def keys(self):
        return self.key_items

    def hide(self, *items):
        for item in items:
            if item not in self.keys():
                continue
            self.key_items.remove(item)
        return self

    def append(self, **kwargs):
        for key, value in kwargs.items():
            self.key_items.append(key)
            setattr(self, key, value)
        print(id(self))
        return self

    def __getitem__(self, item):
        return getattr(self, item, '')

    @staticmethod
    def get_url_no_param():
        full_path = request.full_path
        main_path = full_path.split('?')
        return main_path[0]

    def get_headers(self, environ=None):
        return [('Content-Type', 'application/json')]

在视图函数中的调用如下

def __register_user_email():
    email_form = EmailForm()
    email_form.validate_for_api()
    user_id = User.create(email_form.nickname.data,
                          email_form.account.data,
                          email_form.password.data)
    result = Success().append(user_id=user_id)
    return result

前端返回的结果为:

4541714696
4541714696

两个对象的id相等,但并未返回期望的结果

{
    "error_code": "0",
    "msg": "成功",
    "request": "POST /v1/client"
}

并没有显示我添加的user_id
经调试,append()方法是先于get_body()调用的
但是append()里的self.key_items与 get_body()里的self.key_items不一致
图片描述

图片描述

请问为什么会出现这样的情况呢? 该如何解决?

写回答

1回答

大野和我3326249

提问者

2018-12-25

忽略此问题,问题发生在我调用上,此贴结束

0
0

Python Flask+RESTFul API前后端分离入门实战

RESTFul+权限管理+token令牌+扩展flask=提升编程思维

2053 学习 · 359 问题

查看课程