gpt4 book ai didi

django-rest-framework - DjangoRestFramework - 当 `get_queryset()` 由于对象不存在而无法获取对象时,我在哪里引发 404 错误?

转载 作者:行者123 更新时间:2023-12-04 00:11:47 24 4
gpt4 key购买 nike

这是我的观点:

class PostListByUsername(generics.ListAPIView):
serializer_class = PostSerializer
permission_classes = (IsAuthenticated, IsLikeOrOwnerDeleteOrReadOnly, IsFromSameLocation,)

def get_queryset(self):
username = self.kwargs['username']
user = User.objects.get(username=username)
return Post.objects.filter(owner__username=username).order_by('-createdAt')

这是我的 IsFromSameLocation允许:
class IsFromSameLocation(permissions.BasePermission):
"""
Permission.
Allow permissions to authenticated users from the same
location as the user.
"""
message = 'Not from the same location.'

def has_permission(self, request, view):
username = view.kwargs.get('username', None)
try:
userProfile = User.objects.get(username=username)
except:
return False

return request.user.userextended.location == userProfile.userextended.location

话虽如此,在我的 get_queryset() 中方法,我做 user = User.objects.get(username=username)但如果用户不存在,我想引发 404 错误。我知道 get_queryset()应该返回一个查询集,所以我猜我不应该在该方法中引发 404。那么我到底应该在哪里进行检查以查看用户是否存在?请注意,在我的许可下,我会尝试查看用户是否存在,但根据我的理解,权限应该只返回 True 或 False(不会引发 404 错误)。

最佳答案

您实际上可以从权限中引发异常,Django 会正确处理它。例如,您可以使用 get_object_or_404() shortcut function 来做到这一点。 :

def has_permission(self, request, view):
username = view.kwargs.get('username', None)
userProfile = get_object_or_404(User, username=username)
return request.user.userextended.location == userProfile.userextended.location

事实上,虽然抛出异常的代码是在 View 中执行的,但它会由 Django 处理,所以从哪里引发它应该无关紧要——从 View 、序列化程序、权限、模型等方法。

关于django-rest-framework - DjangoRestFramework - 当 `get_queryset()` 由于对象不存在而无法获取对象时,我在哪里引发 404 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33664084/

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