You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django函数式视图登录失败错误消息展示实现方法

问题解答

完全可以在不使用Form类的手写函数式视图中实现登录错误提示,直接用Django内置的messages消息框架即可,不需要重构现有逻辑,也不需要修改你已经写好的自定义User模型,步骤如下:

1. 确认基础配置(新建项目默认自带,无特殊情况不用改)

先检查项目settings.py里的默认配置是否齐全,缺项补上即可:

  • INSTALLED_APPS 列表中包含 django.contrib.messages
  • MIDDLEWARE 列表中包含 django.contrib.sessions.middleware.SessionMiddleware、django.contrib.messages.middleware.MessageMiddleware
  • TEMPLATES 配置项的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 02:24:21