一.
1-1,序列化器部分
from myapp.models import * #导入所有模型
from rest_framework import serializers #导入序列器
from rest_framework.exceptions import ValidationError
import re #导入re功能包
class UserSer(serializers.ModelSerializer): #用户模型类的序列化器
password = serializers.CharField(max_length=64, write_only=True,trim_whitespace=True)
class Meta:
model =User
fields =['id','username','password','mobile','email','date_joined','last_login']
read_only_fields =['id'] #只读字段设置id字段
def validate(self, attrs): #反序列化时,对接收的数据进行全局的校验
#设置attrs为获取数据的存放函数
# print("验证数据中...", attrs)
username =attrs.get("username") #获取数据
password =attrs.get("password")
mobile =attrs.get("mobile")
email =attrs.get("email")
if not all([username,password,mobile,email]): #三者只要有一个为空,则抛出异常
raise ValidationError #ValidationError 合法性错误 raise 发起
# 用户名需包含字母、数字、下划线,长度为5-20
if not re.findall("^w{5,20}$",username): #检验用户名的正则
raise ValidationError("用户名不符合规范")
# 密码是8到20位数字、字母或下划线以及特殊!@#$%^&*符号
elif not re.findall(r"^[w!@#$%^&*]{8,20}$", password): #检验密码的正则
raise ValidationError("密码不符合规范")
elif not re.findall(r"^1[34578]d{9}$", mobile): #检验手机号的正则
raise ValidationError("手机格式不符合规范")
else:
return attrs #如果以上条件都满足,则返回数据到attrs函数
#重写序列化器的create方法
def create(self, validated_data): #validated_data验证过的数据
#自己创建的数据对象,并加密数据添加到数据库
user = User.objects.create_user(**validated_data)
# user.set_password(validated_data.get("password"))
# user.save()
return user
1-2,视图部分
from rest_framework.views import APIView #导入api视图
from rest_framework.response import Response #导入响应
from myapp.serializers import UserSer #导入序列化器
from myapp.models import User #导入模型层
from rest_framework.viewsets import ModelViewSet #导入视图集
from rest_framework.pagination import PageNumberPagination #导入分页器
class MyPagination(PageNumberPagination): #定义自己的分页类
page_size = 3 #每页3个数据
max_page_size = 5 #最大页面数为5
page_query_param = "page" #页面查询参数
page_size_query_param = "pageSize" #/users/?page=2&pageSize=3
class UserInfoViewSet(ModelViewSet): #用户信息视图
queryset = User.objects.all() #获取查询集
serializer_class = UserSer #序列化器类
lookup_field = 'pk' #查询字段1
lookup_url_kwarg = 'pk' #查询字段2
pagination_class = MyPagination #分页类
def create(self, request, *args, **kwargs): #
ser =self.get_serializer(data=request.data) #定义一个ser变量,将数据传递
if ser.is_valid(): #执行逻辑,对ser里的数据进行校验
ser.save() #底层执行序列化器的create方法
return Response({"code":201,"msg":'添加用户成功'},status=201)
else:
return Response({"code":400,"msg":ser.errors},status=200)
1-3,配置路由
from django.urls import path #
from myapp import views #导入子应用视图
from .views import *
from rest_framework.routers import DefaultRouter
urlpatterns = [
path('sms_code/',views.SmsCodeview.as_view()), #获取短信验证码/v1/users/sms_code/
path("longincount/",LoginUserAPIView.as_view()), # 用户的登录
path("total_count/",TotalCountview.as_view()), #统计用户总数
path("day_increment/",Dayincrementview.as_view()), #获取日增用户
path("day_live/",Dayincrementview.as_view()), #获取日活用户
]
router =DefaultRouter() #实例一个路由对象
router.register('users',UserInfoViewSet) # 注册路由
urlpatterns += router.urls # 在主路由中拼接 自动生成的路由
前端部分
2-1,User组件内容
2-2,addUser组件



