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

如何在Python Django页面刷新后清除message.info提示信息?

解决Django登录错误消息刷新后持续显示的问题

这个问题的核心是没有遵循Post/Redirect/Get(PRG)设计模式,直接在POST请求中返回渲染页面会导致消息残存在会话中,刷新页面时重复显示。

修复方法

修改views.py,将登录失败后的render改为重定向到登录页面的GET请求:

def index(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')

        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return redirect('register:index')
        else:
            messages.info(request, "Username or password incorrect.")
            # 重定向回登录页面,替换为你实际的登录URL名称
            return redirect('login:index')

    return render(request, 'login/login.html')

原理说明

  • 当你在POST请求中直接render页面时,添加的错误消息会被保存在session中,但由于是同一个请求内渲染,消息不会被标记为已读取。刷新页面时浏览器发送GET请求,session中的消息依然存在,导致重复显示。
  • 改用重定向后,POST请求结束后会跳转到GET请求的登录页面,此时模板读取并显示消息,Django会自动将这些消息标记为已处理并从session中移除,再次刷新页面时就不会再显示错误消息。
  • 同时PRG模式还能避免用户刷新页面时重复提交表单的问题。

额外检查

确保你的urls.py中已为登录页面设置正确的名称,例如:

# urls.py(登录应用下)
from django.urls import path
from . import views

app_name = 'login'
urlpatterns = [
    path('', views.index, name='index'),
]

内容的提问来源于stack exchange,提问作者froody

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:58:23