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

Python阿木 发布于 16 小时前 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

然后,创建一个应用:

bash
python manage.py startapp myapp

配置Django项目

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

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

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

定义用户模型

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

python
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
添加自定义字段
is_admin = models.BooleanField(default=False)
is_user = models.BooleanField(default=False)

创建管理员、普通用户和游客权限

在`myapp/models.py`中,定义三个权限:

python
from django.contrib.auth.models import Permission, Group

管理员权限
admin_permission = Permission.objects.create(codename='admin_access', name='Can access admin panel')

普通用户权限
user_permission = Permission.objects.create(codename='user_access', name='Can access user panel')

游客权限
guest_permission = Permission.objects.create(codename='guest_access', name='Can access guest panel')

创建用户组

在`myapp/models.py`中,创建三个用户组:

python
from django.contrib.auth.models import Group

创建管理员组
admin_group = Group.objects.create(name='Admins')
admin_group.permissions.add(admin_permission)

创建普通用户组
user_group = Group.objects.create(name='Users')
user_group.permissions.add(user_permission)

创建游客组
guest_group = Group.objects.create(name='Guests')
guest_group.permissions.add(guest_permission)

创建视图和序列化器

在`myapp/views.py`中,创建一个视图来处理用户请求:

python
from rest_framework import viewsets
from .models import CustomUser
from .serializers import CustomUserSerializer

class UserViewSet(viewsets.ModelViewSet):
queryset = CustomUser.objects.all()
serializer_class = CustomUserSerializer

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

python
from rest_framework import serializers
from .models import CustomUser

class CustomUserSerializer(serializers.ModelSerializer):
class Meta:
model = CustomUser
fields = ('id', 'username', 'is_admin', 'is_user', 'is_guest')

配置URL

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

python
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import UserViewSet

router = DefaultRouter()
router.register(r'users', UserViewSet)

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

在`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')),
]

创建超级用户

在终端中运行以下命令创建一个超级用户:

bash
python manage.py createsuperuser

运行服务器

在终端中运行以下命令启动Django开发服务器:

bash
python manage.py runserver

现在,您可以使用Django REST framework实现了一个基于管理员、普通用户和游客的权限分级系统。您可以通过API访问不同的用户面板,根据用户的权限级别来限制访问。

总结

本文介绍了如何使用Django REST framework实现一个权限分级系统。通过定义用户模型、权限和用户组,我们可以控制不同用户对资源的访问。这个系统可以根据实际需求进行调整和扩展,以适应不同的业务场景。