在DRF中实现自定义响应类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在DRF中实现自定义响应类相关的知识,希望对你有一定的参考价值。
我的views.py。
class OptiResponse(Response):
def __init__(self, token=None, code=None, headers=None):
if code==0:
if token:
data = {
"status":{
"code": 0,
"error_message": ""
},
"data":{
"token":token,
}
}
data = {
"status":{
"code": 0,
"error_message": ""
},
"data":{
}
}
data = {
"status":{
"code": 1,
"error_message": ""
},
"data":{
}
}
self.token=token
self.data = data
if headers:
for name, value in six.iteritems(headers):
self[name] = value
@property
def rendered_content(self):
return ret
@property
def status_text(self):
return responses.get(self.status_code, '')
def __getstate__(self):
return state
class LoginView(generics.CreateAPIView):
serializer_class = serializers.LoginSerializer
"""Authenticate and Login a user."""
def post(self, request, format=None):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
email = serializer.data['email']
password = serializer.data['password']
remember = serializer.data['remember_me']
user = authenticate(email=email, password=password)
if user:
if user.is_active:
if remember:
request.session.set_expiry(120)
login(request, user)
token = Token.objects.get(user=user)
return OptiResponse(0, token.key)
上面是我当前应用视图的快照。我正在研究DRF API,我想自定义DRF的Response类。我想用两个参数来调用响应,如 'Reponse(code, token)'
如上图,其中其余API输出的格式应该是如下图所示的代码值。
{
"status":{
"code": 0, #either 0 in success or 1 in error.
"error_message": ""
},
"data":{
}
}
是否可以通过子类来实现 'Response'
在我自己的班级里。可能是我做的方法不对。请给我建议可能的解决方案。
谢谢!在此先说一句。
答案
He Paulo,如果你想创建你的自定义响应,你应该。
- 用父类SimpleTemplateResponse notResponse来编写你的类。
- 并注意你的回复的内容_类型。
from django.template.response import SimpleTemplateResponse
class MyCustomResponse(SimpleTemplateResponse):
def __init__(self,code=None,token=None):
super(Response, self).__init__(None, status=None)
"""
PUT YUOR DATA CODES HERE ....
"""
self.token = token
self.code = code
if headers:
for name, value in six.iteritems(headers):
self[name] = value
@property
def rendered_content(self):
renderer = getattr(self, 'accepted_renderer', None)
media_type = 'application/json'
context = getattr(self, 'renderer_context', None)
assert renderer, ".accepted_renderer not set on Response"
assert media_type, ".accepted_media_type not set on Response"
assert context, ".renderer_context not set on Response"
context['response'] = self
content_type = 'application/json'
self['Content-Type'] = content_type
ret = renderer.render(self.data, media_type, context)
if not ret:
del self['Content-Type']
return ret
以上是关于在DRF中实现自定义响应类的主要内容,如果未能解决你的问题,请参考以下文章
如何在自定义 Spring 存储库中实现自定义方法? [复制]