我将ListCreateAPIView
用于POST and GET requests
。我想检查当前用户是否已登录GET请求。
如何获取GET方法中的当前用户(如果他已登录)?
为了使其正常工作,我必须使用令牌发送,这不是我想要的,因为如果用户注销,则用户将无法访问listView。
我以为是django信号,还是要重写授权。
我认为django会发出信号,或者改写Permissions或Authorization。
class PropertyList(generics.ListCreateAPIView):
"""To create a property"""
permission_classes = [permissions.IsAuthenticatedOrReadOnly, ]
queryset = Property.objects.filter(published=True)
serializer_class = PropertySerializer
filterset_class = PropertyFilter
pagination_class = LimitOffsetPagination
#
# def perform_create(self, serializer):
# serializer.save(created_by=self.request.user)
# for _ in range(100):
# logger.info("Your log message is here")
def get_serializer_context(self):
context = super().get_serializer_context()
context['is_create'] = True
print(self.request.user)
if self.request.user.is_authenticated:
print(self.request.user)
current_user = self.request.user
context['user_favs'] = (Bookmark.objects.filter(
bookUser = current_user
).values(
))
else:
context['user_favs'] = False
return context
在get_serializer_context(self)中,我想获取当前用户,因为我返回该用户已为其添加书签的属性。 我需要在Get请求中添加令牌以拥有当前用户,但这意味着,我们必须登录才能看到属性,这不是我想要的
设置
REST_FRAMEWORK = {
"DATE_INPUT_FORMATS": ["%d-%m-%Y"],
# 'DATETIME_FORMAT': "%d-%m-%Y %H:%M:%S",
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
# 'rest_framework_simplejwt.authentication.JWTAuthentication',
),
'DEFAULT_FILTER_BACKENDS': (
'django_filters.rest_framework.DjangoFilterBackend',
),
'EXCEPTION_HANDLER': 'dooba.utils.custom_exception_handler',
'TEST_REQUEST_DEFAULT_FORMAT': 'json',
# 'DEFAULT_PARSER_CLASSES': (
# 'rest_framework.parsers.JSONParser',
# 'rest_framework.parsers.FormParser',
# 'rest_framework.parsers.MultiPartParser',
# )
}
答案 0 :(得分:0)
如果没有登录用户,则可以通过self.request.user
在APIView方法中访问用户对象,该用户对象应该为AnonymousUser
,否则您应该获得登录用户。
编辑:此外,research透露,当您将JSONWebTokenAuthentication与IsAuthenticatedOrReadOnly一起使用时,即使您发出GET请求,也将返回带有过期令牌的401 。我建议您在向PropertyList
视图发送GET请求时从不放置Authenticate标头,这样可以解决您的问题。