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