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

Django登录注册

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

Django登录注册

1.创建app

django-admin startapp login

注册app,INSTALLED_APPS里边加入login

2.设计表结构

from django.db import models
from django.contrib.auth.models import AbstractUser


# Create your models here.


class User(AbstractUser):
    mobile = models.CharField(max_length=11, unique=True, verbose_name='手机号')

    class Meta:
        db_table = 'tb_users'
        verbose_name = '用户'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.username


进行迁移

python manage.py makemigrations

python manage.py migrate

3.注册、手机号或账号登录视图

class Register(APIView):
    def post(self, request):
        # 获取前端传来的userName,pwassword,mobile
        name = request.data.get("username")
        pwd = request.data.get('password')
        mobile = request.data.get('mobile')
        # 校验
        if not all([name, pwd, mobile]):
            # 失败
            return Response({"msg": '请输入用户名或密码', "code": '400'})
        else:
            num = User.objects.filter(mobile=mobile).count()
            if num > 0:
                return Response({'msg': '手机号已被注册', "code": '400'})
            # 成功校验
            else:
                # 加密写入数据库
                user = User.objects.create_user(username=name, password=pwd, mobile=mobile)
            return Response({"msg": '注册成功', "code": '200', "user": user.username})


# 登录
class Login(APIView):
    def post(self, request):
        # 获取前端传来的数据
        username = request.data.get('username')
        pwd = request.data.get("password")
        # user = authenticate(username, password)
        print('获取', pwd, username)
        # 进行密码校验
        # 1. 校验用户名是否在数据库
        try:
            user = User.objects.get(Q(username=username) | Q(mobile=username))
        except Exception as e:
            return Response({"msg": "用户不存在!", "code": "400"})
        if check_password(pwd, user.password):
            # 校验成功
            payload = jwt_payload_handler(user)
            token = jwt_encode_handler(payload)
            # print('++++++++++', token)
            return Response({"msg": "登录成功", "code": "200", 'token': token, "user": {"username": user.username}})
        else:
            return Response({"msg": "用户名和密码不一致!"})

4.验证token

(1)在settings配置中的MIDDLEWARE里边加入定义的中间件。如:'utils.middleware.AuthMiddlware'

(2)验证token

class AuthMiddlware(MiddlewareMixin):
    """解析token"""
    def process_request(self, request):
        token = request.META.get('HTTP_AUTHORIZATION')
        # print('校验token', token)
        if token:
            # token = token.replace('Bearer ', '')
            try:
                # 解密token decode
                jwt_token = jwt.decode(token, settings.SECRET_KEY)
                user = User.objects.get(id=jwt_token.get('sub'))
                request.user = user
            except:
                return False
        return

5.配置相关路由

urlpatterns = [
    path('register/', views.Register.as_view()),
    path('login/', views.Login.as_view()),
]

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

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

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