gpt4 book ai didi

django-rest-framework - 如何检查当前用户是否已登录 django rest 框架?如何通知其他 Django 应用程序当前用户已登录?

转载 作者:行者123 更新时间:2023-12-04 17:34:17 25 4
gpt4 key购买 nike

我将 ListCreateAPIView 用于 POST 和 GET 请求。我想检查当前用户是否登录 GET 请求。如何在 GET 方法中获取当前用户(如果他登录)?为了让它工作,我必须发送 token ,这不是我想要的,因为如果用户注销,用户将无法访问 listView。我以为django signals,或者重写授权。

我想到了 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 请求中添加 token 以拥有当前用户,但这意味着,我们必须登录才能查看属性,这不是我想要的

设置

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',
# )

}

如你所见enter image description here

enter image description here

最佳答案

如果没有登录用户,您可以通过 self.request.user 在 APIView 方法中访问用户对象,它应该是 AnonymousUser 否则您应该得到登录用户。

编辑:进一步research透露,当您将 JSONWebTokenAuthentication 与 IsAuthenticatedOrReadOnly 一起使用时,返回 401 和过期的 token 即使您发出 GET 请求。我建议您在向 PropertyList View 发出 GET 请求时永远不要放置 Authenticate header ,这将解决您的问题。

关于django-rest-framework - 如何检查当前用户是否已登录 django rest 框架?如何通知其他 Django 应用程序当前用户已登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57286735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com