gpt4 book ai didi

Django REST 权限类和认证类的区别

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

最后一件事我对 Django Rest Framework 有点困惑这就是权限类和身份验证类之间的区别

这是我的设置.py

REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAdminUser',


),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
'PAGINATE_BY': 10

}

在我看来,我有以下几点......

class ProfileList(generics.ListCreateAPIView):
"""
API endpoint that represents a list of users.
"""
permission_classes = (permissions.IsAdminUser,)
model = Profile
serializer_class = ProfileSerializer

def pre_save(self, obj):
obj.owner = self.request.user

我假设上面发生的情况是,只有管理员用户才能访问可浏览的 API,而拥有有效 token 的用户仍然可以获取 json 请求。然而,情况并非如此,只是 IsAuthenticated 似乎给了他们访问权限,但是 = 这仍然允许我的用户在登录时访问在线版本。

我希望所有拥有有效 token 的用户都可以访问,但只有管理员用户有权查看带有 session 的在线 API 版本,这可能吗?

最佳答案

I want all my users with a valid token to get access, but only admin users to have permission to view the online API version with sessions, is this possible?

首先值得注意的是,可浏览 API 不会为您的用户提供比您仅渲染为 JSON 时更多的权限。这只是 API 端点的一个更好的 View 。就我个人而言,我通常希望向最终开发人员公开可浏览的 API,因为这使得针对 API 的开发变得更加容易。

如果您确实想对除管理员用户之外的所有人隐藏它,您可以采取两种方法:

  1. 重写 View 上的 get_renderers() 方法。 (简要记录here)您可以检查 self.request.user.is_staff,并且仅在管理员用户的情况下才包含 Browseable API 呈现器。

  2. 对可浏览的 API 渲染器进行子类化,并重写 .render()。 (例如,参见 here )您可以使用 renderer_context['request'] 获取传入请求,如果不是管理员用户,则只需渲染为标准 JSON。

关于Django REST 权限类和认证类的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14880451/

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