Django登录功能异常:点击提交后无法跳转至首页
Django登录提交仅触发GET请求的问题修复
核心问题分析
- 表单嵌套导致提交行为错误:模板中外层存在未指定
method的<form>标签,内层才是带POST方法的表单,但提交按钮属于外层表单,默认触发GET请求,完全没走到内层POST表单的逻辑。 - 视图语法错误:
request.POST.get['username']误用方括号,正确写法是调用方法用括号request.POST.get('username');另外login函数是直接执行登录操作,不需要赋值给变量。
修复步骤
1. 修正模板表单结构
移除外层多余的<form>标签,确保提交按钮在POST表单内部:
修改后的log-in.html:
{% extends "BizzyCardApp/base.html" %} {% block content %} {% load crispy_forms_tags %} <br> <br> <br> <br> <br> <div class="container center oswald" id="grad" style="border-radius: 10%; width: 300px;"> <br> <table class="table table-borderless table-responsive container"> <tbody> <tr> <div class="mb-3 mt-3"> <form method="POST"> {% csrf_token %} {% for field in form %} <div> <p>{{ field.label }}: <br> {{ field}}</p> {% for error in field.errors %} <small style="color: red">{{ error }}</small> {% endfor %} </div> {% endfor %} <div class="d-flex justify-content-center"> <button type="submit" class="btn btn-light center text-center">Submit</button> </div> </form> </div> </tr> </tbody> </table> <div class="text-center"> <a href="/sign-up/" class="link-dark"> Don't have an account? Sign Up </a> </div> </div> {% endblock %}
2. 修正视图语法与逻辑
修改login_request视图:
def login_request(request): if request.method == 'POST': # 修正get方法调用方式 username = request.POST.get('username') password = request.POST.get('password') user = authenticate(username=username, password=password) if user is not None: # login函数直接执行,无需赋值 login(request, user) messages.success(request, f' welcome {username} !!') return redirect('index') else: messages.info(request, f'Unable to Login now') form = AuthenticationForm() context = {'form':form} return render(request, "BizzyCardApp/log-in.html", context)
验证修复效果
修改后重启服务,点击登录提交按钮会触发POST请求,后端验证通过后将跳转到index页面;验证失败时,会停留在登录页并显示提示信息。
内容的提问来源于stack exchange,提问作者macintushar
相关产品推荐
相关产品推荐

