Django用户认证功能开发遭遇Page not found (404)错误求助
解决Django用户认证中的404错误问题
嘿,我一眼就揪出导致404的核心问题了——你的signup.html里的表单标签把请求方法和提交路径搞混了!
问题根源
看你的错误URL:http://localhost:8000/POST?xxx,浏览器居然在请求/POST这个路径,这是因为你在表单里写了:
<form action="POST">
这里完全写错了!action属性是用来指定表单提交的目标URL,而你把它当成了请求方法的参数。正确的请求方法应该用method属性来指定,你现在相当于让浏览器把POST当成一个路径去访问,而你的urls.py里根本没配置这个路径,所以必然返回404。
修复步骤
把signup.html里的表单标签改成下面这样:
<form method="POST"> {%csrf_token%} {{form.as_p}} <div class="field"> <div class="control"> <button class="button is-success"> sign up </button> </div> </div> </form>
如果你想明确指定提交的目标URL(更规范),可以用Django的模板标签生成对应路径:
<form method="POST" action="{% url 'signup' %}"> {%csrf_token%} {{form.as_p}} <div class="field"> <div class="control"> <button class="button is-success"> sign up </button> </div> </div> </form>
额外优化建议
为了让URL更符合Django的规范,建议把urls.py里的signup路径加上末尾的斜杠:
urlpatterns = [ path('', views.home, name="home"), path('signup/', views.signup, name="signup") # 加上末尾的/ ]
这样用户不管访问/signup还是/signup/都能正常跳转,避免不必要的路径问题。
验证修复
改完之后,刷新/signup页面,再提交表单,应该就能正常创建用户并跳转到首页了,不会再出现404错误啦!
内容的提问来源于stack exchange,提问作者dailycoding




