栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Django的用户信息后端接口

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django的用户信息后端接口

一.
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组件


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/998365.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号