gpt4 book ai didi

django - 如何在 Django 休息框架 ViewSet 中对不同的功能使用不同的身份验证

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

如何在 Django rest 框架 ViewSet 中对不同的功能使用不同的身份验证?

我创建了一个 UserViewSet,它有两个功能:

<强>1。 list(列出所有注册的用户,permission_classes应该是IsAuthenticated)

<强>2。 register(注册一个新用户,permission_classes 应该是AllowAny)。

--------------------views.py-----------------------------------

class UserViewSet(ViewSet):
@list_route(methods=['get'], permission_classes = [IsAuthenticated, ])
def list(self, request):
...
...

@list_route(methods=['post'], permission_classes = [AllowAny, ])
def register(self, request):
...
...


--------------------urls.py-----------------------------------

users_list = views.UserViewSet.as_view({
'get': 'list',
'post': 'register'
})

urlpatterns = [
url(r'^$', users_list, name='users-list'),
...
...
]


--------------------settings.py---------------------------------

REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
)
}
...
...

注册用户的命令行:

curl -H "Content-Type: application/json" -X POST -d '{ "email":"user@example.com"}' http://192.168.30.45:8000/users/

响应:

{"detail":"Authentication credentials were not provided."}

我的“register”功能的“permission_class”设置为“AllowAny”,还需要身份验证吗?为什么会这样?

最佳答案

您的代码似乎有效,我真的不知道问题出在哪里,但您可以尝试编写自定义权限:

class IsAuthenticatedOrCreate(permissions.IsAuthenticated):
def has_permission(self, request, view):
if request.method == 'POST':
return True
return super(IsAuthenticatedOrCreate, self).\
has_permission(request, view)

关于django - 如何在 Django 休息框架 ViewSet 中对不同的功能使用不同的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39218250/

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