程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

django 注冊登錄流程

編輯:Python

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這個板塊需要寫

  1. # 指定模型類     應用名 模型類名

  2. 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})


————————————————
版權聲明:本文為CSDN博主「Li- Li」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_62935305/article/details/125219779


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved