使用REST框架实现用户登录。
对应官方文档:https://q1mi.github.io/Django-REST-framework-documentation/tutorial/4-authentication-and-permissions_zh/

用户注册功能分析

  • RESTful
  • 数据开始

    • 模型,数据库
    • 创建用户

      • 用户身份

        • 管理员
        • 普通
        • 已注销用户
  • 注册实现

    • 添加了超级管理员生成

实践

新建APP

python manage.py startapp UserAuthAndPermission

在settings.py中注册新建的项目:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'App.apps.AppConfig',
    'UserAuthAndPermission',
]

新建模型

models.py:

class UserModel(models.Model):
    u_name = models.CharField(max_length=32, unique=True)
    u_password = models.CharField(max_length=256)
    is_delete = models.BooleanField(default=False)
    is_super = models.BooleanField(default=False)

迁移模型到数据库

序列化器

新建serializers.py

from rest_framework import serializers

from UserAuthAndPermission.models import UserModel


class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = UserModel
        fields = ['url','id','u_name','is_super']

视图

views.py

  • 只有超级管理员才能查询所有用户信息
  • 非超级管理员只能查询自己的信息

    from django.shortcuts import render
    from rest_framework.generics import ListCreateAPIView
    
    from DjangoREST.serializers import UserSerializer
    from UserAuthAndPermission.models import UserModel
    
    
    class UsersSPIView(ListCreateAPIView):
      
      serializer_class = UserSerializer
      
      queryset = UserModel.objects.all()

    路由

    新建urls.py:

    from django.urls import path
    
    from UserAuthAndPermission import views
    
    urlpatterns = [
      path(r'users/', views.UsersSPIView.as_view()),
    ]

    总urls注册:

    urlpatterns = [
      path('admin/', admin.site.urls),
      # path('app/', include('App.urls')),
      path('app/', include(router.urls)),
      path(r'up/', include('UserAuthAndPermission.urls'))
    ]

运行项目:

如果重复提交,就会提示已经存在,而不是直接返回报错:

创建超级用户

现在要实现创建的用户名被自动识别成超级用户。

首先在settings.py中新建一个元组,里面规定了哪些用户名是超级用户。

SUPER_USERS = ('root','ad')

现在修改views类,识别创建的用户名是以上规定的用户名,就设置成超级用户。

所以要重写createmodelmixin的create方法,在这个创建函数中添加判断用户名是否为规定的超级用户名。

class UsersAPIView(ListCreateAPIView):

    serializer_class = UserSerializer

    queryset = UserModel.objects.all()

    def create(self, request, *args, **kwargs):
        data = request.data.copy()  # 获得request参数
        print(data)
        # 获得u_name
        u_name = data.get('u_name')
        # 判断是否在元组中
        if u_name in SUPER_USERS:  # 判断是否在规定的超级用户名元组中
            data.update({'is_super': True}) # 修改data中的is_super字段的布尔值,如果为超级管理员就修改成True
            print(u_name)
            # serializer.data = data
            print('创建超级管理员')
        serializer = self.get_serializer(data=data)
        serializer.is_valid(raise_exception=True)
        self.perform_create(serializer)
        headers = self.get_success_headers(serializer.data)
        return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

测试:
创建非超级管理员用户

创建超级管理员:

最后修改:2024 年 03 月 13 日
如果觉得我的文章对你有用,请随意赞赏