个人博客系列-后端项目-用户注册功能(7)

介绍

用户注册API的主要流程:1.前端用户提交用户名,密码 2. 序列化器校验用户名,密码是否合法。3.存入数据库。4.签发token

创建序列化器

bash 复制代码
from rest_framework import serializers
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from userauth.models import User
from systemauth.models import UserRole

# 用户注册序列胡器
class RegisterSerializer(serializers.Serializer):
    """
    注册用户信息序列化校验
    """
    username = serializers.CharField()
    password = serializers.CharField()

    def validate(self, attrs):
        username = attrs.get('username')
        password = attrs.get('password')
        if User.objects.filter(username=username).exists():
            raise serializers.ValidationError('用户名已被占用')
        print(password)
        if not password or len(password) < 6:
            raise serializers.ValidationError("密码不符合要求,请使用6位以上密码")

        if attrs.get("is_vip"):
            attrs['is_vip'] = False
       	attrs['is_active'] = True
        # 将用户信息保存到数据库中
        user = User.objects.create(**attrs)
        # 为其设置角色为普通用户
        UserRole.objects.create(**{'user_id': user.id, 'role_id': 2})
        if user:
            # 签发token
            '签发token'
            refresh = TokenObtainPairSerializer.get_token(user)

            data = {
                'code': 100,
                'message': '登录成功',
                'username': user.username,
                'refresh': str(refresh),
                'access': str(refresh.access_token),
            }
            return data
        else:
            raise serializers.ValidationError('用户注册失败')

view视图

bash 复制代码
from userauth.serializers import RegisterSerializer
from rest_framework.generics import GenericAPIView
class UserRegisterView(GenericAPIView):
    # 注册接口,局部禁用用户验证和权限
    authentication_classes = ()
    permission_classes = ()
    serializer_class = RegisterSerializer
    def post(self, request, *args, **kwargs):
        res = self.get_serializer(data=request.data)
        res.is_valid(raise_exception=True)
        data = res.validated_data
        return Response({'msg': data})

路由

将路由加入验证中间件白名单

测试接口

相关推荐
Wonderful U3 小时前
Python+Django实战|在线音乐分享平台:音乐上传、歌手专辑管理、在线播放、自定义歌单、收藏点赞、评论互动
开发语言·python·django
王小王-1238 小时前
基于Django的个性化餐饮场所推荐系统
后端·python·django·个性化餐厅推荐·个性化餐饮推荐
Wonderful U8 小时前
Python+Django实战|个人&家庭记账理财系统:多账户管理、收支分类、日常记账、预算管控、账单检索、数据可视化、报表导出
python·信息可视化·django
li-xun1 天前
我给自己的 Django 博客做了一个在线工具箱:从图片压缩到正则测试,尽量都在浏览器本地处理
后端·python·django
Wonderful U1 天前
Python+Django实战|线上问卷与投票调研系统:自定义题型、问卷发布、链接分享、答卷收集、数据可视化、报表导出
python·信息可视化·django
Wonderful U1 天前
Python+Django实战|社区物业管理系统:业主档案、车位管理、物业费收缴、线上报修、投诉建议、园区公告、日常巡检
android·python·django
不考研当牛马2 天前
Django 框架 深度学习 第二课程
后端·python·django
不考研当牛马3 天前
Django 框架 深度学习
python·深度学习·django
右耳朵猫AI3 天前
Python周刊2026W22 | Django 6.1 Alpha 1发布、Nuitka 4.1发布、PEP 831终稿、PEP 808已接受
开发语言·python·django
Wonderful U3 天前
Python+Django实战|美食菜谱分享与食材采购一体化系统:食谱发布收藏、图文教程、食材商城、购物车、订单管理、美食点评、智能食谱推荐
python·django·美食