欢迎访问宙启技术站
智能推送

使用DjangoModelPermissions()确保只有授权用户可以访问和修改你的DjangoREST框架API

发布时间:2023-12-26 01:59:06

DjangoREST框架通过使用视图权限类来控制API的访问权限。其中一个常用的权限类是DjangoModelPermissions,它用于基于模型的权限控制,确保只有授权用户可以访问和修改API。

DjangoModelPermissions类基于模型定义了四种操作权限:创建(POST)、读取(GET)、更新(PUT、PATCH)和删除(DELETE)。这意味着只有拥有相应权限的用户才能执行这些操作。

下面将通过一个具体的示例来演示如何使用DjangoModelPermissions来实现API权限控制。假设我们有一个简单的博客应用,其中包含文章和评论两个模型。

首先,在settings.py文件中将'DjangoModelPermissions'添加到权限类列表中:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissions',
    ]
}

接下来,我们将创建一个名为'ArticleViewSet'的视图集,用于处理文章相关的操作:

from rest_framework import viewsets
from rest_framework.permissions import DjangoModelPermissions
from .models import Article
from .serializers import ArticleSerializer

class ArticleViewSet(viewsets.ModelViewSet):
    queryset = Article.objects.all()
    serializer_class = ArticleSerializer
    permission_classes = [DjangoModelPermissions]

在上面的代码中,我们指定了查询集和序列化器,并将DjangoModelPermissions权限类添加到permission_classes列表中。

最后,我们需要在urls.py文件中定义一个路由,将ArticleViewSet与相应的URL路径关联起来:

from django.urls import include, path
from rest_framework import routers
from .views import ArticleViewSet

router = routers.DefaultRouter()
router.register('articles', ArticleViewSet)

urlpatterns = [
    path('', include(router.urls)),
]

现在,我们已经完成了配置,并且可以测试API的权限控制。为了进行测试,需要创建一些用户和文章数据。然后,可以使用以下命令进行API访问:

1. 获取文章列表:

GET /articles/

只有拥有读取权限的用户才能成功访问该API。

2. 创建新文章:

POST /articles/

只有拥有创建权限的用户才能成功创建文章。

3. 获取特定文章:

GET /articles/{article_id}/

只有拥有读取权限的用户才能成功获取该文章。

4. 更新特定文章:

PUT /articles/{article_id}/

只有拥有更新权限的用户才能成功更新该文章。

5. 删除特定文章:

DELETE /articles/{article_id}/

只有拥有删除权限的用户才能成功删除该文章。

可以看到,通过使用DjangoModelPermissions权限类,可以确保只有授权用户可以访问和修改API。这提供了一种灵活且可扩展的方法来管理API的权限控制。