url中的下一个参数没有显示,但在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['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下打印下一个时,它正确地打印了它,但当它必须重定向时,它会重定向,而不会在url中显示下一个。即signup_uri = f'/signup?next={next}'return redirect(f'/login?next={next}')将{next}显示为空。原因可能是什么?任何帮助都会得到通知。

根据signup方法的定义,您只为GET请求检索next参数的值。但是,当您尝试POST请求时,不会检索next参数的值。因此,next变量的值被设置为"",因此signup_uri变量的值也被设置为登录重定向url("/login?next="(的"/signup?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')

相关内容

最新更新