📌  相关文章
📜  在 API 中添加权限 – Django REST Framework(1)

📅  最后修改于: 2023-12-03 15:23:06.674000             🧑  作者: Mango

在 API 中添加权限 – Django REST Framework

在 Django REST Framework 中,权限是管理 API 访问权限的一种方式。通过对 API 进行身份验证和授权,在保护敏感数据的同时防止未经授权的访问。本文将介绍如何在 Django REST Framework 中添加不同类型的权限。

基本用法

在 Django REST Framework 中添加权限很简单,只需要在视图(View)中添加 permission_classes 属性即可。如下所示:

from rest_framework.permissions import IsAuthenticated

class MyViewset(viewsets.ModelViewSet):

    permission_classes = [IsAuthenticated]
    # ...

在这个视图中,只有通过身份验证的用户才能访问该 API。如果未通过身份验证,则会得到一个 401 未授权的响应。

常用权限类

Django REST Framework 提供了一些常用的权限类,可以轻松实现访问控制。下面是一些常用的权限类:

  • AllowAny:允许任何人访问该 API。
  • IsAuthenticated:只允许已经通过身份验证的用户访问该 API。
  • IsAdminUser:只允许管理员用户访问该 API。
  • IsAuthenticatedOrReadOnly:对于未经身份验证的用户,只允许读取 API 内容,但不能执行写入操作。
  • DjangoModelPermissions:基于 Django 模型的权限控制。控制程序对 Django 模型的增删改查操作。
  • DjangoObjectPermissions:基于 Django 模型的单个实例权限控制。控制程序对 Django 模型中单个实例的增删改查操作。

使用这些权限类非常简单,只需要把它们以列表的形式赋值给视图的 permission_classes 属性即可。例如,如果想要控制某个 API 只对管理员用户开放,则代码如下所示:

from rest_framework.permissions import IsAdminUser

class MyViewset(viewsets.ModelViewSet):

    permission_classes = [IsAdminUser]
    # ...

自定义权限类

如果需要更复杂的访问控制,可以创建自定义的权限类。自定义权限类需要实现一个 BasePermission 类的子类,并定义其中的 has_permissionhas_object_permission 方法。

from rest_framework.permissions import BasePermission

class MyCustomPermission(BasePermission):
    message = 'Custom message when permission is denied'

    def has_permission(self, request, view):
        """
        Define if the user has permission to access the API
        """
        # Add your logic here - for example:
        # return request.user.is_authenticated()
        return True

    def has_object_permission(self, request, view, obj):
        """
        Define if the user has permission to access a specific object
        """
        # Add your logic here - for example:
        # return obj.author == request.user
        return True

有了自定义权限类后,可以像使用其他权限类一样将其添加到视图中。例如:

class MyViewset(viewsets.ModelViewSet):

    permission_classes = [MyCustomPermission]
    # ...

结论

通过使用权限,可以轻松地控制 Django REST Framework 中的 API 访问。想要控制访问谁和什么时候能访问,只需要将相应的权限类添加到视图即可。同时,自定义权限类可以应对复杂的授权场景。