六. Django项目之电商购物商城 -- 用户登录

Django项目之电商购物商城 -- 用户登录

需要开发文档和前端资料的可私聊

一. 用户名登录

创建视图

复制代码
# 登录视图
class LoginView(View):
    def get(self , request):
        return render(request , 'login.html' )

    def post(self , request):
        login_forms = LoginForms(request.POST)
        if login_forms.is_valid():
            username = login_forms.cleaned_data.get('username')
            password = login_forms.cleaned_data.get('password')
            remembered = login_forms.cleaned_data.get('remembered')

            # 校验数据
            if not all([username , password]):
                return HttpResponse("缺少必要参数")

            # 查询数据库中是否存在用户数据
            user = authenticate(username=username , password = password)

            if user is None:
                return render(request, 'login.html', {'account_errmsg': '用户名或者密码错误'})

            # 登录成功 , 设置保存用户状态
            login(request, user)


            # 如果用户勾选保存
            if remembered:
                # 用户选择记住登录状态 , 状态默认保存14天
                request.session.set_expiry(None)
            else:
                # 用户状态不保存 , 关闭浏览器 , 数据销毁
                request.session.set_expiry(0)

            # 重定向到首页
            return redirect('index')
        else:
            # 获取form组件的错误信息
            content = {"forms_err_msg" : login_forms.errors}
            return render(request , 'login.html' , content)

创建路由

复制代码
path('login/' , views.LoginView.as_view() , name='login'),

二. 手机号/用户名登录

重写django中的ModelBackend方法

复制代码
from django.contrib.auth.backends import ModelBackend
from users.models import User
import re

def check_user(data):
    # 判断传入的data为用户名还是电话
    data_check = re.match(r'1[3-9]\d{9}',data)

    try:
        if data_check:
            user = User.objects.get(mobile=data)

        else:
            user = User.objects.get(username = data)
    except:
        return None
    else:
        return user




# 重写方法
class UserNameModleBack(ModelBackend):
    def authenticate(self, request, username=None, password=None, **kwargs):

        user = check_user(username)

        # 判断密码是否正确
        if user.check_password(password) and user:
            return user

        else:
            return None

在setting中配置重写的方法

复制代码
# 配置自定义认证的方法
AUTHENTICATION_BACKENDS = ['users.utils.UserNameModleBack']
相关推荐
yaoxin52112313 小时前
462. Java 反射 - 获取声明类与封闭类
java·开发语言·python
中微极客13 小时前
解锁LLM开发全栈能力:Python + LangChain + RAG 工程实战指南
人工智能·python·langchain
hhzz14 小时前
Barbershop:基于GAN和分割Mask的图像合成技术——从理论到实战全解析
图像处理·人工智能·python·深度学习·计算机视觉
Ulyanov15 小时前
雷达导引头Python仿真框架:GPU加速、6-DOF模型与半实物仿真接口
开发语言·python·雷达信号处理·雷达导引头
列逍15 小时前
博客系统测试
自动化测试·python·性能测试
星云开发16 小时前
拒绝无效加班!用Python打造自动化办公流,附Word/PDF互转硬核代码
python
dream_home840717 小时前
图像算法模型NPU适配与算法服务实战指南
人工智能·python·算法·npu 图像服务
AIGS00117 小时前
跨越语义鸿沟:企业本体语义平台的构建与落地
java·人工智能·python·机器学习·人工智能ai大模型应用
李可以量化17 小时前
PTrade 量化策略实战:二八轮动策略深度解析(下)
python
Mx_coder17 小时前
8年Java开发者AI转型第二周:RAG检索优化-从60%到90%准确率的3个关键技巧 (Day 13-14)
人工智能·python