我们用DRF做后端。我正在尝试创建一个类来处理整个系统中的非致命消息,返回为类似JsonResponse的APIException,但不引发异常。
我们的想法是能够做这样的事情:
return APIMessage("This is my message.")...with指定/覆盖message_type、message_code和status_code的可选args。
我遇到的第一个问题是__init__不能返回一个值。从this post,我找到了我应该做的方法,但我现在得到了这个错误.
__new__() takes 1 positional argument but 2 were given这是我的课..。
class APIMessage(object):
default_message = None
default_message_code = 'message'
default_message_type = 'status'
default_status_code = 200
def __init__(self, message=None, message_code=None, message_type=None, status_code=None):
if message is None:
message = self.default_message
if message is None:
raise APIMessageRequired()
if message_code is None:
message_code = self.default_message_code
if message_type is None:
message_type = self.default_message_type
self.status_code = status_code
if status_code is None:
self.status_code = self.default_status_code
self.result = {
'result': {
'message': message,
'message_code': message_code,
'message_type': message_type,
}
}
def __new__(cls):
return JsonResponse(cls.result, status=cls.status_code)我意识到它需要一个显式的"self“arg,但是从上面链接的文章中的示例代码来看,__new__方法应该将"cls”作为它的第一个(只?)阿格。
我认为,如果我只创建一个实用程序函数,这将是可行的,但如果可能的话,我宁愿使用一个类。
发布于 2019-06-24 14:19:03
重写__new__肯定不是这样做的方法。如果有一个类在实例化时返回该类的实例以外的其他内容,这是没有意义的。
我想到了两种选择。一种是根本不使用类;因为您只想要将一些数据包装在响应中,所以应该编写一个函数来完成这个任务。
def api_message(message=None, message_code=None, message_type=None, status_code=None):
...
return JsonResponse(result, status=status_code)另一个是让您的类继承drf的响应类,并将数据传递到超类init。然后,当DRF接收到实例时,它将执行正确的操作。
class APIMessage(Response):
...
def __init__(self, message=None, message_code=None, message_type=None, status_code=None):
...
super().__init__(self.result, status=self.status_code)https://stackoverflow.com/questions/56738253
复制相似问题