Django全局登录表单提交无效仅刷新页面问题求助
解决登录表单提交后仅刷新页面的问题
看起来你的登录表单无法正常工作的核心原因是表单没有提交到专门处理登录请求的视图,当前页面的视图并没有处理登录的POST逻辑,所以点击提交后只是刷新页面,没有实际执行验证和登录操作。下面是一步步的修复方案:
1. 配置Django内置的登录视图路由
首先在你的项目或应用的urls.py中添加Django自带的登录视图,它会帮你处理登录的验证、会话创建等逻辑:
from django.contrib.auth import views as auth_views from django.urls import path urlpatterns = [ # 保留你现有的其他URL配置 path('login/', auth_views.LoginView.as_view(), name='login'), # 你的登出路由已经配置,确保它正常工作 path('logout/', auth_views.LogoutView.as_view(), name='logout'), ]
2. 修改base.html中的表单,指定正确的提交地址
你的表单目前没有设置action属性,会默认提交到当前页面的URL,但当前页面的视图并不处理登录请求。需要给<form>标签添加action属性,指向我们刚配置的登录路由:
<form method="post" action="{% url 'login' %}"> {% csrf_token %} {{ login.as_p }} <div id="buttons" align="right"> <button class ="btn btn-primary" type="submit">تسجيل الدخول</button><br><br> </div> </form>
3. 优化上下文处理器的表单逻辑(可选,用于在原页面显示错误)
现在你的上下文处理器只是生成一个空表单,当登录验证失败时,默认会跳转到Django自带的登录模板页面。如果想在原来的页面显示错误信息,可以修改context_processors.py,让它在登录请求失败时返回带错误的表单实例:
from django.contrib.auth.forms import AuthenticationForm from django.urls import reverse def include_login_form(request): # 判断是否是登录页面的POST请求 if request.path == reverse('login') and request.method == 'POST': # 用提交的数据实例化表单,自动携带错误信息 login_form = AuthenticationForm(request, data=request.POST) else: login_form = AuthenticationForm() return {'login': login_form}
同时,你需要在settings.py中补充配置,确保登录流程符合你的需求:
# 在settings.py中添加 LOGIN_URL = '/login/' LOGIN_REDIRECT_URL = '/' # 登录成功后跳转的页面
4. 测试验证
现在点击登录按钮,表单会提交到/login/路由,由Django的LoginView处理:
- 如果账号密码正确,会自动跳转到
LOGIN_REDIRECT_URL指定的页面 - 如果验证失败,会返回表单并显示错误信息(做了第三步优化的话,会在原页面显示错误)
内容的提问来源于stack exchange,提问作者Ahmed Wagdi
相关产品推荐
相关产品推荐

