Python url中的下一个参数未显示,但正在django中正确打印
这是我的注册视图:Python url中的下一个参数未显示,但正在django中正确打印,python,django,Python,Django,这是我的注册视图: def signup(request): next = request.GET.get('next', '') print(next) if request.user.is_authenticated: return redirect('/') else: if request.method == "POST": first_name=request.POST['fir
def signup(request):
next = request.GET.get('next', '')
print(next)
if request.user.is_authenticated:
return redirect('/')
else:
if request.method == "POST":
first_name=request.POST['first_name']
email=request.POST['email']
password=request.POST['password']
cpassword=request.POST['cpassword']
signup_uri = f'/signup?next={next}'
if password==cpassword:
if User.objects.filter(email=email).exists():
messages.info(request,'Email already in use')
return redirect(signup_uri)
elif User.objects.filter(mobile=mobile).exists():
messages.info(request,'Mobile Number already in use')
return redirect(signup_uri)
else:
user=User.objects.create_user(first_name=first_name,email=email,password=password)
user.save();
return redirect(f'/login?next={next}')
else:
messages.info(request,'Passwords not matching')
return redirect('signup_uri')
else:
return render(request,'signup.html')
我面临的问题是,当我在
def signup
下打印next时,它正确地打印了它,但当它必须重定向时,它会重定向,而不会在url中显示任何作为next的内容。也就是说,signup\u uri=f'/signup?next={next}'
和return redirect(f'/login?next={next}')
将{next}显示为空。可能的原因是什么?任何帮助都将被告知。根据signup
方法的定义,仅针对GET
请求检索next
参数的值。但是,当您尝试执行POST
请求时,不会检索next
参数的值。因此,next
变量的值被设置为”
,因此,signup\u uri
变量的值也被设置为“/signup?next=“
以及登录重定向url(”/login?next=“
)。为了解决这个问题,您的代码应该如下所示
def signup(request):
next = request.GET.get('next', '')
print(next)
if request.user.is_authenticated:
return redirect('/')
else:
if request.method == "POST":
first_name = request.POST['first_name']
email = request.POST['email']
password = request.POST['password']
cpassword = request.POST['cpassword']
next = request.POST.get("next", "")
signup_uri = f'/signup?next={next}'
if password == cpassword:
if User.objects.filter(email=email).exists():
messages.info(request,'Email already in use')
return redirect(signup_uri)
elif User.objects.filter(mobile=mobile).exists():
messages.info(request,'Mobile Number already in use')
return redirect(signup_uri)
else:
user = User.objects.create_user(first_name=first_name, email=email, password=password)
user.save();
return redirect(f'/login?next={next}')
else:
messages.info(request, 'Passwords not matching')
return redirect('signup_uri')
else:
return render(request, 'signup.html')
下一步=request.POST.get(“下一步”,“下一步”)是您所做的唯一更改。如果是,那么它仍然会给我同样的问题您是否从前端应用程序发送
POST
请求中的next
参数的值?即使您没有发送任何值,如果没有我进行的修复,问题也不会得到解决。我将在表单中的signup.html
中传递该值。在模板中调试以检查{{next}的值POST
请求的参数设置与否。如果request.GET.next
按预期传递准确值,则可以。如果答案有助于你解决问题,请别忘了给它投票。蒂亚。