/signup/处的NoReverseMatch-为'< WSGIRequest:POST'/signup/'>'未找到 [英] NoReverseMatch at /signup/ - Reverse for '<WSGIRequest: POST '/signup/'>' not found
问题描述
我正在处理的项目是博客网站,并且停留在此注册过程中,我希望它能够像注册后一样起作用,用户登陆到主页上,但这反而向我显示了以上错误>
views.py:
def handleSignup(request):如果request.method =='POST':用户名= request.POST ['用户名']fname = request.POST ['fname']lname = request.POST ['lname']电子邮件= request.POST ['email']pass1 = request.POST ['pass1']pass2 = request.POST ['pass2']#创建用户myuser = User.objects.create_user(用户名,电子邮件,密码1)myuser.first_name = fnamemyuser.last_name = lnamemyuser.save()messages.success(请求,您的帐户已成功创建!")返回重定向(请求,"/home.html")别的:返回HttpResponse(未找到错误404")
urls.py:
urlpatterns = [path(",views.home,名称="home"),路径("contact/",views.contact,name ="contact"),path("about",views.about,name ="about"),路径("signup/",views.handleSignup,name ="handleSignup"),]
base.html中的表单:
< form action ="/signup/";method ="post">< div class ="form-group">< label for =用户名">用户名</label><输入类型=文本";class ="form-control"id =用户名"name =用户名"占位符=选择唯一的用户名"</div>< div class ="form-group">< label for ="fname">名字</label><输入类型=文本";class ="form-control"id ="fname"name ='fname'placeholder ="First Name"></div>< div class ="form-group">< label for ="lname">姓氏</label><输入类型=文本";class ="form-control"id ="lname"name ='lname'占位符=姓氏"></div>< div class ="form-group">< label for =电子邮件"> Email</label><输入类型=电子邮件"class ="form-control"id ="email"name ='email'占位符="email@example.com"></div>< div class ="form-group">< label for ="pass1">选择密码</label><输入类型=密码";class ="form-control"名称="pass1" id ="pass1"</div>< div class ="form-group">< label for ="pass2">确认密码</label><输入类型=密码";class ="form-control"名称="pass2" id ="pass2"</div>{%csrf_token%}< button type =提交";class ="btn btn-primary"> Submit</button></form>
错误日志:
NoReverseMatch位于/signup/反转为< WSGIRequest:POST'/signup/'>"未找到.'< WSGIRequest:POST'/signup/'>'不是有效的视图函数或模式名称.请求方法:POST要求网址:http://127.0.0.1:8000/signup/Django版本:3.1异常类型:NoReverseMatch异常值:反转为< WSGIRequest:POST'/signup/'>"未找到.'< WSGIRequest:POST'/signup/'>'不是有效的视图函数或模式名称.异常位置:_reverse_with_prefix中的C:\ Users \ jayant nigam \ projects \ practise \ lib \ site-packages \ django \ urls \ resolvers.py,行685Python可执行文件:C:\ Users \ jayant nigam \ projects \ practise \ Scripts \ python.exe的Python版本:3.8.5Python路径:['C:\\ Users \\ jayant nigam \\ projects \\ everythingcs','C:\\ Python38 \\ python38.zip','C:\\ Python38 \\ DLLs','C:\\ Python38 \\ lib','C:\\ Python38','C:\\ Users \\ jayant nigam \\ projects \\ practise','C:\\ Users \\ jayant nigam \\ projects \\ practise \\ lib \\ site-packages']服务器时间:2020年9月28日星期一17:39:46 +0000
突出显示的错误行:
返回重定向(请求,"/home.html")
您在 urls中指定了
,因此您可以执行以下操作: path(,",views.home,name ="home")
.py
返回重定向("/")
您不应该将 request
作为第一个参数传递给 redirect()
,您通常只需提供一个URL(相对或绝对)即可.
实际上,作为最佳实践,应使用 reverse
提供URL,例如:
反向导入...返回重定向(reverse('home'))
有关 redirect(),请参见文档代码>
.
The project I am working on is the blogging website and I am stuck at this signup process, I want it to function like after signup, the user lands on the home page, but instead this is showing me the above error
views.py:
def handleSignup(request):
if request.method == 'POST':
username = request.POST['username']
fname = request.POST['fname']
lname = request.POST['lname']
email = request.POST['email']
pass1 = request.POST['pass1']
pass2 = request.POST['pass2']
# creating users
myuser = User.objects.create_user(username, email, pass1)
myuser.first_name = fname
myuser.last_name = lname
myuser.save()
messages.success(request, 'your account have been successfully created!')
return redirect(request, "/home.html")
else:
return HttpResponse("error 404 not found")
urls.py:
urlpatterns = [
path("", views.home, name="home"),
path("contact/", views.contact, name="contact"),
path("about", views.about, name="about"),
path("signup/", views.handleSignup, name="handleSignup"),
]
forms in base.html:
<form action="/signup/" method="post">
<div class="form-group">
<label for="username">Username</label>
<input type="text" class="form-control" id="username" name = 'username' placeholder="choose a unique username">
</div>
<div class="form-group">
<label for="fname">Firstname</label>
<input type="text" class="form-control" id="fname" name = 'fname' placeholder="First Name">
</div>
<div class="form-group">
<label for="lname">Lastname</label>
<input type="text" class="form-control" id="lname" name= 'lname' placeholder="Last Name">
</div>
<div class="form-group">
<label for="email">Email</label>
<input type="email" class="form-control" id="email" name = 'email' placeholder="email@example.com">
</div>
<div class="form-group">
<label for="pass1">Choose Password</label>
<input type="password" class="form-control" name = 'pass1' id="pass1">
</div>
<div class="form-group">
<label for="pass2">Confirm password</label>
<input type="password" class="form-control" name = 'pass2' id="pass2">
</div>
{% csrf_token %}
<button type="submit" class="btn btn-primary">Submit</button>
</form>
the error log:
NoReverseMatch at /signup/
Reverse for '<WSGIRequest: POST '/signup/'>' not found. '<WSGIRequest: POST '/signup/'>' is not a valid view function or pattern name.
Request Method: POST
Request URL: http://127.0.0.1:8000/signup/
Django Version: 3.1
Exception Type: NoReverseMatch
Exception Value:
Reverse for '<WSGIRequest: POST '/signup/'>' not found. '<WSGIRequest: POST '/signup/'>' is not a valid view function or pattern name.
Exception Location: C:\Users\jayant nigam\projects\practise\lib\site-packages\django\urls\resolvers.py, line 685, in _reverse_with_prefix
Python Executable: C:\Users\jayant nigam\projects\practise\Scripts\python.exe
Python Version: 3.8.5
Python Path:
['C:\\Users\\jayant nigam\\projects\\everythingcs',
'C:\\Python38\\python38.zip',
'C:\\Python38\\DLLs',
'C:\\Python38\\lib',
'C:\\Python38',
'C:\\Users\\jayant nigam\\projects\\practise',
'C:\\Users\\jayant nigam\\projects\\practise\\lib\\site-packages']
Server time: Mon, 28 Sep 2020 17:39:46 +0000
the error line which it is highlighting:
return redirect(request, "/home.html")
You specified path("", views.home, name="home")
in your urls.py
, therefore you can just do:
return redirect("/")
You shouldn't be passing request
as a first argument to redirect()
, you only need to provide a URL (relative or absolute) most of the time.
Actually, as a best practice, that URL should be provided using reverse
, e.g.:
from django.urls import reverse
...
return redirect(reverse('home'))
See the doc for redirect()
.
这篇关于/signup/处的NoReverseMatch-为'< WSGIRequest:POST'/signup/'>'未找到的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!