如何使用相同的URL为GET和POST请求设置不同的权限级别?

2024-05-13 09:22:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用DRF(Django-Rest框架)构建端点。在

django==2.1.5
djangorestframework==3.9.1
django-rest-auth
djangorestframework-jwt

我有模型“Item”,我想为GET和POST请求设置不同的权限类。在

我是这样做的:

^{pr2}$

我想对所有方法使用一个端点,如下所示:

urlpatterns = [
    path('api/item/', views.item_list),
    path('api/item/<int:pk>/', views.item_details),
]

我想AllowAny用户请求GET方法 并检查isAdminUser是否为POST请求方法

我能像在烧瓶里一样做吗?也就是说,一个装饰工用一种方法?在


Tags: pathdjango方法框架restapigetitem
2条回答

因为您使用的是基于函数的视图,因此没有替代任何方法的选项。现在,您可以创建一个新的权限类,并在其中包含您的逻辑

# permissions.py
from rest_framework.permissions import IsAdminUser


class MyCustomPermission(IsAdminUser):
    def has_permission(self, request, view):
        if request.method == 'GET':
            return True
        else:
            return super().has_permission(request, view)

在你看来

^{pr2}$

如果您计划迁移到基于类的视图,则可以通过重写^{}方法来实现。

你可以找到一个simple example here

def get_permissions(self):
    """
    Instantiates and returns the list of permissions that this view requires.
    """
    if self.request.method == 'GET':
        permission_classes = [AllowAny]
    else:
        permission_classes = [IsAdminUser]
    return [permission() for permission in permission_classes]

使用class based视图,定义并使用custom permissions

相关问题 更多 >