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'
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