六. 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']
相关推荐
Hgfdsaqwr5 小时前
Django全栈开发入门:构建一个博客系统
jvm·数据库·python
开发者小天5 小时前
python中For Loop的用法
java·服务器·python
老百姓懂点AI6 小时前
[RAG实战] 向量数据库选型与优化:智能体来了(西南总部)AI agent指挥官的长短期记忆架构设计
python
喵手8 小时前
Python爬虫零基础入门【第九章:实战项目教学·第15节】搜索页采集:关键词队列 + 结果去重 + 反爬友好策略!
爬虫·python·爬虫实战·python爬虫工程化实战·零基础python爬虫教学·搜索页采集·关键词队列
Suchadar8 小时前
if判断语句——Python
开发语言·python
ʚB҉L҉A҉C҉K҉.҉基҉德҉^҉大8 小时前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python
喵手8 小时前
Python爬虫零基础入门【第九章:实战项目教学·第14节】表格型页面采集:多列、多行、跨页(通用表格解析)!
爬虫·python·python爬虫实战·python爬虫工程化实战·python爬虫零基础入门·表格型页面采集·通用表格解析
0思必得09 小时前
[Web自动化] 爬虫之API请求
前端·爬虫·python·selenium·自动化
莫问前路漫漫9 小时前
WinMerge v2.16.41 中文绿色版深度解析:文件对比与合并的全能工具
java·开发语言·python·jdk·ai编程
木头左9 小时前
Backtrader框架下的指数期权备兑策略资金管理实现与风险控制
python