六. 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']
相关推荐
SelectDB15 小时前
Apache Doris Python UDF:让 SQL 直接调用 Python 生态,支撑 Agent 时代复杂业务逻辑
大数据·数据库·python
荣码1 天前
GraphRAG:普通RAG只能回答"点"的问题,我踩了4个坑才搞懂
java·python
金銀銅鐵1 天前
[Python] 基于欧几里得算法,实现分数约分计算器
python·数学
Lyn_Li1 天前
Kaggle Top 5 | 198只股票、200条数据的金融预测——BattleFin高分方案从零复现
python·kaggle·比赛复盘·金融预测
小九九的爸爸2 天前
前端想要入门Agent开发,要具备哪些Python基础?
python·agent·ai编程
阿耶同学2 天前
手把手教你用 LangGraph 搭建三层嵌套 Agent 架构
python·程序员
花酒锄作田2 天前
Pydantic校验配置文件
python
hboot2 天前
AI工程师第四课 - 深度学习入门
pytorch·python·神经网络
ZhengEnCi3 天前
P2M-Matplotlib折线图完全指南-从数据可视化到趋势分析的Python绘图利器
python·matlab·数据可视化
ZhengEnCi3 天前
P2L-Matplotlib饼图完全指南-从数据可视化到图表定制的Python绘图利器
python·matlab