一.
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() #获取查询集