今天我深入研究了django-rest-auth软件包。我不知道context={'request': self.request}
和get_response
函数中的post
是什么。
他们说上下文参数用于包含序列化程序的额外上下文。但是在代码之下,似乎没有必要放置上下文参数。有没有我错过的东西?
上下文:http://www.django-rest-framework.org/api-guide/serializers/
django-rest-auth:https://github.com/Tivix/django-rest-auth/blob/master/rest_auth/views.py
def get_response(self):
serializer_class = self.get_response_serializer()
if getattr(settings, 'REST_USE_JWT', False):
data = {
'user': self.user,
'token': self.token
}
serializer = serializer_class(instance=data,
context={'request': self.request})
else:
serializer = serializer_class(instance=self.token,
context={'request': self.request})
return Response(serializer.data, status=status.HTTP_200_OK)
def post(self, request, *args, **kwargs):
self.request = request
self.serializer = self.get_serializer(data=self.request.data,
context={'request': request})
self.serializer.is_valid(raise_exception=True)
self.login()
return self.get_response()
答案 0 :(得分:3)
有时您需要在序列化方法中使用请求的数据。对于这种情况,您可以向序列化程序的上下文提供请求。例如,如果您查看PasswordResetSerializer
,您会在save
方法use_https
中看到根据上下文参数传递的请求计算的选项:
def save(self):
request = self.context.get('request')
# Set some values to trigger the send_email method.
opts = {
'use_https': request.is_secure(),
'from_email': getattr(settings, 'DEFAULT_FROM_EMAIL'),
'request': request,
}
此外,您可以检查用户是否经过身份验证,并依赖于它在序列化程序级别返回一个或另一个数据。