Python 语言 用 Django REST framework 实现权限分级系统 管理员 / 普通用户

Python阿木 发布于 22 小时前 1 次阅读


Django REST Framework 权限分级系统实现指南

在Web应用程序中,权限分级系统是确保数据安全和用户访问控制的重要机制。Django REST framework(DRF)是一个强大的工具,用于构建Web API,它提供了灵活的权限和认证机制。本文将详细介绍如何使用Django REST framework实现一个基于管理员和普通用户的权限分级系统。

环境准备

在开始之前,请确保您已经安装了Django和Django REST framework。以下是一个基本的安装命令:

bash
pip install django djangorestframework

创建Django项目和应用

创建一个新的Django项目和一个应用:

bash
django-admin startproject myproject
cd myproject
python manage.py startapp myapp

配置Django项目

在`myproject/settings.py`中,添加以下配置:

python
INSTALLED_APPS = [
...
'rest_framework',
'myapp',
]

REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
],
}

创建用户模型

在`myapp/models.py`中,创建一个自定义用户模型,继承自Django的`AbstractUser`:

python
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
is_admin = models.BooleanField(default=False)

然后,在`myapp/admin.py`中注册这个模型:

python
from django.contrib import admin
from .models import CustomUser

admin.site.register(CustomUser)

创建权限类

在`myapp/permissions.py`中,创建自定义权限类:

python
from rest_framework import permissions

class IsAdminUser(permissions.BasePermission):
"""
Custom permission to only allow admin users.
"""

def has_permission(self, request, view):
return request.user.is_admin

创建视图和序列化器

在`myapp/serializers.py`中,创建一个序列化器:

python
from rest_framework import serializers
from .models import CustomUser

class UserSerializer(serializers.ModelSerializer):
class Meta:
model = CustomUser
fields = ['id', 'username', 'is_admin']

在`myapp/views.py`中,创建一个视图:

python
from rest_framework import generics
from .models import CustomUser
from .serializers import UserSerializer
from .permissions import IsAdminUser

class UserList(generics.ListAPIView):
queryset = CustomUser.objects.all()
serializer_class = UserSerializer
permission_classes = [IsAdminUser]

class UserCreate(generics.CreateAPIView):
queryset = CustomUser.objects.all()
serializer_class = UserSerializer
permission_classes = [IsAdminUser]

配置URLs

在`myapp/urls.py`中,创建URL配置:

python
from django.urls import path
from .views import UserList, UserCreate

urlpatterns = [
path('users/', UserList.as_view()),
path('users/create/', UserCreate.as_view()),
]

在`myproject/urls.py`中,包含`myapp`的URL配置:

python
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('myapp.urls')),
]

测试权限系统

现在,您可以使用Django的测试客户端来测试权限系统:

bash
python manage.py test myapp

确保您的测试覆盖了管理员和普通用户的权限。

结论

通过以上步骤,您已经使用Django REST framework实现了一个基本的权限分级系统。管理员用户可以访问和修改所有用户数据,而普通用户则没有这样的权限。这个系统可以根据您的需求进一步扩展和定制。

请注意,本文只是一个简单的示例,实际应用中可能需要考虑更多的安全性和性能因素。例如,您可能需要使用JWT(JSON Web Tokens)进行认证,或者使用Django的组(Groups)和权限(Permissions)系统来提供更细粒度的控制。