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.文章到这就结束了,快去写写吧,有什么问题请指示了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值