self.context['request '].user always returns AnonymousUser
self.context['request '].user always returns AnonymousUser
我正在尝试在模型序列化程序中获取当前用户
self.context['request'].user
但它总是 returns AnonymousUser。
这是序列化程序代码片段
class QuestionBlockDetailSerializer(serializers.ModelSerializer):
isvoted = serializers.SerializerMethodField(read_only=True)
def get_isvoted(self,obj):
user = self.context['request'].user
print self.context['request'].user
...
下面是权限和AuthBackends的设置
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'social.backends.google.GoogleOAuth2',
'social.backends.facebook.FacebookOAuth2',)
'DEFAULT_AUTHENTICATION_CLASSES': (
'oauth2_provider.ext.rest_framework.OAuth2Authentication',
'rest_framework_social_oauth2.authentication.SocialAuthentication',
'rest_framework.authentication.TokenAuthentication',
),
查看:
class QuestionBlockDetailAPI(generics.RetrieveAPIView, mixins.UpdateModelMixin, mixins.DestroyModelMixin):
permission_classes =[IsAuthenticatedOrReadOnly]
serializer_class = QuestionBlockDetailSerializer
queryset= Question_Block.objects.all()
lookup_field = 'q_slug'
def delete(self, request, *args, **kwargs):
return self.destroy(request,*args, **kwargs)
def put(self, request, *args, **kwargs):
return self.update(request,*args,**kwargs)
我尝试添加 Session 和 BasicAuthentication,但它总是返回 AnonymousUser。请帮我解决这个问题。
您正在 QuestionBlockDetailAPI
视图中使用 IsAuthenticatedOrReadOnly
权限 class。因此,未经身份验证的用户可以读取您的 api。因此,当未经身份验证的用户访问您时,self.context['request'].user
是 AnonymousUser api。
你可以通过改变你的def get_isvoted(self,obj):
方法来解决这个问题,比如:
def get_isvoted(self,obj):
if self.context['request'].user.is_authenticated():
return self.context['request'].user.isvoted
else:
return False
只需在条件
中使用user.is_authenticated
if self.context['request'].user.is_authenticated:
return true
我正在尝试在模型序列化程序中获取当前用户
self.context['request'].user
但它总是 returns AnonymousUser。 这是序列化程序代码片段
class QuestionBlockDetailSerializer(serializers.ModelSerializer):
isvoted = serializers.SerializerMethodField(read_only=True)
def get_isvoted(self,obj):
user = self.context['request'].user
print self.context['request'].user
...
下面是权限和AuthBackends的设置
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'social.backends.google.GoogleOAuth2',
'social.backends.facebook.FacebookOAuth2',)
'DEFAULT_AUTHENTICATION_CLASSES': (
'oauth2_provider.ext.rest_framework.OAuth2Authentication',
'rest_framework_social_oauth2.authentication.SocialAuthentication',
'rest_framework.authentication.TokenAuthentication',
),
查看:
class QuestionBlockDetailAPI(generics.RetrieveAPIView, mixins.UpdateModelMixin, mixins.DestroyModelMixin):
permission_classes =[IsAuthenticatedOrReadOnly]
serializer_class = QuestionBlockDetailSerializer
queryset= Question_Block.objects.all()
lookup_field = 'q_slug'
def delete(self, request, *args, **kwargs):
return self.destroy(request,*args, **kwargs)
def put(self, request, *args, **kwargs):
return self.update(request,*args,**kwargs)
我尝试添加 Session 和 BasicAuthentication,但它总是返回 AnonymousUser。请帮我解决这个问题。
您正在 QuestionBlockDetailAPI
视图中使用 IsAuthenticatedOrReadOnly
权限 class。因此,未经身份验证的用户可以读取您的 api。因此,当未经身份验证的用户访问您时,self.context['request'].user
是 AnonymousUser api。
你可以通过改变你的def get_isvoted(self,obj):
方法来解决这个问题,比如:
def get_isvoted(self,obj):
if self.context['request'].user.is_authenticated():
return self.context['request'].user.isvoted
else:
return False
只需在条件
中使用user.is_authenticatedif self.context['request'].user.is_authenticated:
return true