六. 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']
相关推荐
摘星编程8 小时前
OpenHarmony + RN:Calendar日期选择功能
python
Yvonne爱编码8 小时前
JAVA数据结构 DAY3-List接口
java·开发语言·windows·python
一方_self8 小时前
了解和使用python的click命令行cli工具
开发语言·python
小芳矶8 小时前
Dify本地docker部署踩坑记录
python·docker·容器
2301_822366359 小时前
使用Scikit-learn构建你的第一个机器学习模型
jvm·数据库·python
小郎君。9 小时前
【无标题】
python
喵手10 小时前
Python爬虫实战:数据治理实战 - 基于规则与模糊匹配的店铺/公司名实体消歧(附CSV导出 + SQLite持久化存储)!
爬虫·python·数据治理·爬虫实战·零基础python爬虫教学·规则与模糊匹配·店铺公司名实体消岐
喵手10 小时前
Python爬虫实战:国际电影节入围名单采集与智能分析系统:从数据抓取到获奖预测(附 CSV 导出)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集数据csv导出·采集国际电影节入围名单·从数据抓取到获奖预测
派葛穆10 小时前
Python-PyQt5 安装与配置教程
开发语言·python·qt
自可乐10 小时前
Milvus向量数据库/RAG基础设施学习教程
数据库·人工智能·python·milvus