Django登录功能失效页面刷新不跳转,修改后出现login/post 404错误如何解决
问题根源
首次登录不跳转的原因
- 表单
action属性为#,提交请求只会停留在当前页面,不会传给Django自带的LoginView处理逻辑 - 表单未指定
method="post",默认用GET方式提交参数,不符合LoginView的处理规则 - 用户名、密码输入框没有配置
name属性,后端无法识别对应字段,拿不到提交的账号密码 - 缺少Django要求的CSRF校验字段,POST请求会被直接拦截,无法进入登录校验流程
修改后出现login/post404的原因
你大概率是按照错误指引把表单action属性改成了post或者login/post,但项目中没有配置对应路径的路由,自然会报404。
解决方法
直接替换login.html中的表单代码即可:
<form action="{% url 'login' %}" method="post"> {% csrf_token %} <div class="form-group"> <label for="username">Username</label> <input class="form-control" type="text" id="username" name="username" required placeholder="Enter username"> </div> <div class="form-group"> <a href="pages-recoverpw.html" class="text-muted float-right"><small>Forgot your password?</small></a> <label for="password">Password</label> <div class="input-group input-group-merge"> <input type="password" id="password" name="password" class="form-control" placeholder="Enter password"> <div class="input-group-append" data-password="false"> <div class="input-group-text"> <span class="password-eye"></span> </div> </div> </div> </div> <div class="form-group mb-3"> <div class="custom-control custom-checkbox"> <input type="checkbox" class="custom-control-input" id="checkbox-signin" checked> <label class="custom-control-label" for="checkbox-signin">Remember me</label> </div> </div> <div class="form-group mb-0 text-center"> <button class="btn btn-primary" type="submit"> Log In </button> </div> </form>
关键修改说明
- 把
action="#"改为action="{% url 'login' %}",指定请求提交到登录路由的处理逻辑,也可以留空action="",默认提交到当前路由,符合LoginView同时处理GET/POST请求的规则 - 新增
method="post"指定提交方式 - 表单内添加
{% csrf_token %}通过CSRF校验 - 给用户名输入框新增
name="username",密码输入框新增name="password",让后端可以正常获取提交的参数
修改完成后重启项目,登录成功就会自动跳转到settings.py中配置的interface-home对应的首页。
内容的提问来源于stack exchange,提问作者L.Calvin
相关产品推荐
相关产品推荐

