使用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)
测试:
创建非超级管理员用户
创建超级管理员:
此处评论已关闭