Django函数式视图登录失败错误消息展示实现方法
问题解答
完全可以在不使用Form类的手写函数式视图中实现登录错误提示,直接用Django内置的messages消息框架即可,不需要重构现有逻辑,也不需要修改你已经写好的自定义User模型,步骤如下:
1. 确认基础配置(新建项目默认自带,无特殊情况不用改)
先检查项目settings.py里的默认配置是否齐全,缺项补上即可:
INSTALLED_APPS列表中包含django.contrib.messagesMIDDLEWARE列表中包含django.contrib.sessions.middleware.SessionMiddleware、django.contrib.messages.middleware.MessageMiddlewareTEMPLATES配置项的context_processors列表中包含django.contrib.messages.context_processors.messages
2. 修改视图函数逻辑
在view.py顶部导入messages模块,认证失败时先把错误消息写入会话,再执行跳转;另外建议认证成功后也走redirect跳转,避免用户刷新页面时重复提交表单:
from django.contrib import messages from django.shortcuts import render, redirect from django.contrib.auth import authenticate, login as loginDjango def login(request): if request.method == "GET": return render(request, 'users/login.html') else: Email = request.POST.get('Email') Senha = request.POST.get('Senha') user = authenticate(username=Email, password=Senha) if user: loginDjango(request, user) # 替换成你登录成功后要跳转的路由别名 return redirect('cadastro_convite') else: # 写入错误提示消息 messages.error(request, '邮箱或密码输入错误,请重试') return redirect('login')
3. 修改登录模板渲染错误提示
在登录表单上方加消息遍历代码,把会话里存的错误提示渲染到页面上,你可以根据自己的UI风格调整提示块的样式:
<div class="col-sm-12 col-md-7 login-dir"> <h2 class="login-titulo">Faça seu login!</h2> <!-- 新增错误提示渲染区域 --> {% if messages %} <div class="alert alert-danger" style="color: red; margin: 10px 0;"> {% for msg in messages %} <p>{{ msg }}</p> {% endfor %} </div> {% endif %} <form class="login-form" action="{% url 'login'%}" method="POST"> {% csrf_token %} <div class="form-group"> <input type="text" class="form-control" id="log-email" aria-describedby="emailHelp" name="Email" placeholder="Email"> </div> <div class="form-group"> <input type="password" class="form-control" id="log-senha" name="Senha" placeholder="Senha"> </div> <button type="submit" class="btn btn-primary login-btn_dir"> <i class="fa-solid fa-right-to-bracket"></i> Acessar </button> </form> </div>
注:你原来代码里给button标签加
href属性是无效写法,button作为表单提交元素不需要加href属性,上面的代码已经删除了这处冗余内容。
内容的提问来源于stack exchange,提问作者Alef Da Silva Fernandes
相关产品推荐
相关产品推荐

