[英]Implementing custom Response class in DRF
my views.py:我的意见.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)
Here above is a snapshot of my current app views.以上是我当前应用程序视图的快照。 I'm working on DRF API and I want to customize the Response class of DRF.
我正在研究 DRF API,我想自定义 DRF 的响应类。 I want to call the response with two arguments like
'Reponse(code, token)'
as above, where rest API output should be in the format as per the code value shown below:我想用两个参数调用响应,如上面的
'Reponse(code, token)'
,其中 rest API 输出应采用如下所示的代码值的格式:
{
"status":{
"code": 0, #either 0 in success or 1 in error.
"error_message": ""
},
"data":{
}
}
Is it possible to do so by subclassing 'Response'
class in my own class.是否可以通过在我自己的班级中对
'Response'
类进行子类化来做到这一点。 May be I'm doing it in a wrong way.可能是我做错了。 Please suggest me the possible solution.
请建议我可能的解决方案。
Thanks!谢谢! in Advance.
提前。
He Paulo, if you want to create your custom response you should: He Paulo,如果您想创建自定义响应,您应该:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.