Django-将POST数据从一个视图传递到另一个视图以及表单验证中的错误。
我正在更改帐户的密码。我正在从第一个视图获取用户名和密码,并在第二个视图上传递它。它可以正常工作,但当涉及到第二个视图表单验证时。它会错误地重定向到第一个视图的窗体。那是我的问题 我的目标是,如果第二次身份验证失败,则丢弃数据(用户名和密码)不要更改密码。还有一件事我不希望用户通过get请求访问第二个视图Django-将POST数据从一个视图传递到另一个视图以及表单验证中的错误。,django,validation,post,django-forms,django-views,Django,Validation,Post,Django Forms,Django Views,我正在更改帐户的密码。我正在从第一个视图获取用户名和密码,并在第二个视图上传递它。它可以正常工作,但当涉及到第二个视图表单验证时。它会错误地重定向到第一个视图的窗体。那是我的问题 我的目标是,如果第二次身份验证失败,则丢弃数据(用户名和密码)不要更改密码。还有一件事我不希望用户通过get请求访问第二个视图 def first_view(request): if request.method == 'POST': form=firstForm(request.POST) # for gett
def first_view(request):
if request.method == 'POST':
form=firstForm(request.POST) # for getting username password
if form.is_valid():
return second_view(request) # Don't want HttpResponse here. To send POST request.
#Sending username and password data in POST request.
else:
form=firstForm()
return render(request,'template1.html',{'form':form})
这是通过在手机上发送文本代码进行的第二次身份验证
def second_view(request):
if request.method === 'POST':
form=secondForm(request.POST) # Single field - Code recieved on phone
username=request.POST['username']
password=request.POST['password']
code=GetRandomNumber() # Creates a random number to send on phone.
SendText(code,numer) # Sends code on number
if form.is_valid(): # HERE IT REDIRECTS TO THE FIRST VIEW FORM WITH ERROR
if code==request.POST['code']:
HttpResponse('Succeess')
else:
HttpResponse('Not allowed')
在这种情况下,我建议您使用django会话。例如: 第一视图
类似于此。您的解决方案是正确的,用户将通过身份验证。执行上述代码的原因是步骤4是一个重定向,即GET请求。如果用户点击第二个视图url,我不想弹出第二个视图。这将是一个毫无意义的窗口。在这种情况下,我不能像@login\u required那样使用decorator。如果第二个视图不是由第一个视图启动的,是否有任何方法可以阻止用户访问第二个视图?请注意第(2)点和第(5)点。第(2)点——您只需在会话中保存一个标志
请求。会话['first\u view\u ok']=True
(例如,您还可以在会话中保存用户名/user\u pk/etc),指示用户正确通过了(1)点。不进行身份验证——只存储一个标志。至于(5)——您应该检查request.session['first\u view\u ok']==True是否转到(6),否则将引发错误“需要在FirstView中进行身份验证!”。