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

django的注册登录流程及代码

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

django的注册登录流程及代码

1.注册

   1.1models

   1.2 settings配置

    1.3迁移报错

    1.4注册流程及代码

2.登录

  2.1登录流程

  2.2登录代码


1.注册 1.1models
from django.contrib.auth.models import AbstractUser


class User(AbstractUser):
    phone = models.CharField(max_length=11, verbose_name='手机号', unique=True, null=True)
    class Meta:
        db_table = 'user'

    def __str__(self):
        return self.username
1.2配置

当使用Django内置模块AbstractUser

需要在settings.py里面进行配置一句

注:用AbstractUser这个板块需要写

# 指定模型类     应用名 模型类名
AUTH_USER_MODEL='user.User'
1.3 迁移报错

django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency account.0001_initial on database 'default',

去标记掉admin相关的,在执行迁移就可以了

 1.4 注册流程及代码

create_user是密码加密存入

1.获取前端信息 名字 密码 确认密码 手机号

2.判断用户信息是否为空  : 为空就返回信息不全

3.判断名字是否存在 : 如果存在就返回用户名存在,请重新输入

4.判断手机号是否存在: 如果存在就返回手机号存在,请重新输入

5.判断密码和确认密码是否一致 :不一致就返回密码错误

6.将数据加密存入数据库

7.返回注册成功

from login.models import User

class RegisterView(APIView):
    def post(self, request):
        user_name = request.data.get('username')
        pwd = request.data.get('password')
        re_pwd = request.data.get('confirm_password')
        phone = request.data.get('phone')
        if not all([user_name, pwd, re_pwd, phone]):
            return Response({'msg': '用户信息不全', 'code': 500})
        # 判断姓名
        user_name_num = User.objects.filter(username=user_name).count()
        if user_name_num != 0:
            return Response({'msg': '该用户用户名已经注册过', 'code': 500})
        # 判断电话
        phone_num = User.objects.filter(phone=phone).count()
        if phone_num != 0:
            return Response({'msg': '该用户的手机号已经注册', 'code': 500})
        if pwd != re_pwd:
            return Response({'msg': '密码错误,请重新输入', 'code': 500})
        # 加密存入 create_user
        user = User.objects.create_user(username=user_name, password=pwd, phone=phone)
        print('>>>', user)
        return Response({'msg': '注册成功', 'code': 200})
2.登录  2.1登录流程

1.获取前端信息 名字 密码  手机号

2.判断用户信息是否为空  : 为空就返回信息不全

3.判断数据库中user (名字和手机号)的数据数量:如果是等于零,返回账号和手机号错误

4.否则就:通过 名字和手机号 得到这个对象

5.判断输入获取的密码和数据库加密的密码是否一致

5.1使用  密码效验check_password(输入,数据库的)

6.不一致就是返回密码错误

7.然后存入使用drf框架的jwt_payload_handler用来存储用户信息

                                        jwt_encode_handler用来生成token

8.返回注册成功

2.2登录代码
from login.models import User
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework_jwt.utils import jwt_payload_handler, jwt_encode_handler


class LoginView(APIView):
    def post(self, request):
        user_name = request.data.get('username')
        pwd = request.data.get('password')
        phone = request.data.get('phone')
        if not all([user_name, pwd, phone]):
            return Response({'msg': '用户信息不全', 'code': 500})
        res = User.objects.filter(username=user_name, phone=phone).count()
        if res == 0:
            return Response({'msg': '账号或者手机号错误', 'code': 500})
        else:
            # 登录
            user = User.objects.get(username=user_name, phone=phone)
            # 密码效验check_password(输入,数据库的)
            rest = check_password(pwd, user.password)
            if not rest:
                return Response({'msg': '账号和密码错误'}, status=status.HTTP_203_NON_AUTHORITATIVE_INFORMATION)
        # 加密时生成第二部分的字符串
        payload_dict = jwt_payload_handler(user)
        # 生成token
        token = jwt_encode_handler(payload_dict)
       
        return Response({"msg":"登录成功","code":"200",'token':token})

3.文章到这就结束了,快去写写吧,有什么问题请指示了

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

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

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