gpt4 book ai didi

django - 如何在 Django rest 框架 ViewSet 中设置一个方法不需要身份验证

转载 作者:行者123 更新时间:2023-12-04 15:30:31 26 4
gpt4 key购买 nike

我有 viewset像下面这样:

from rest_framework import viewsets
from paas.serializers import UserSerializer
import logging


logger= logging.getLogger(__name__)

class UserViewSet(viewsets.ViewSet):
def list(self,request):
pass

def create(self,request):
logger.info(request.data)
current_user = UserSerializer.create()

此外,我在我的代码中使用了基于 DRF token 的身份验证。我怎么能简单地说这个 create方法不需要身份验证?
如您所知,在使用 token 实现身份验证后,所有请求都应具有 Token在 header 中,任何没有的请求都会得到 403 错误。

最佳答案

this issue在 DRF 问题跟踪器上,最好的方法似乎是创建自定义权限类。 View 对象有一个 action可用于改变您对 ViewSet 的每个子操作所做的响应的属性。

class IsCreationOrIsAuthenticated(permissions.BasePermission):

def has_permission(self, request, view):
if not request.user.is_authenticated():
if view.action == 'create':
return True
else:
return False
else:
return True

或者更详细的来自 AssembledAdam

(此处复制的代码符合 SO 政策,即不只是链接,以防链接被破坏或更改。)
class AnonCreateAndUpdateOwnerOnly(permissions.BasePermission):
"""
Custom permission:
- allow anonymous POST
- allow authenticated GET and PUT on *own* record
- allow all actions for staff
"""

def has_permission(self, request, view):
return view.action == 'create' or request.user and request.user.is_authenticated

def has_object_permission(self, request, view, obj):
return view.action in ['retrieve', 'update', 'partial_update'] and obj.id == request.user.id or request.user.is_staff

class ListAdminOnly(permissions.BasePermission):
"""
Custom permission to only allow access to lists for admins
"""

def has_permission(self, request, view):
return view.action != 'list' or request.user and request.user.is_staff

关于django - 如何在 Django rest 框架 ViewSet 中设置一个方法不需要身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47122471/

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