Django - 将 POST 数据从一个视图传递到另一个视图以及表单验证错误。

Django - Passing POST data from view to view and bugs with form validation.

我正在更改帐户的密码。我从第一个视图获取用户名和密码并将其传递给第二个视图,它工作正常但是当涉及到第二个视图表单验证时。它错误地重定向到第一个视图的表单。那是我的问题。

我的目标是,如果第二次身份验证失败,则丢弃数据(用户名和密码),不要更改密码。还有一件事我不希望用户通过获取请求访问第二个视图。

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})

这是通过在 phone

上发送文本代码进行的第二次身份验证
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 会话。例如:

第一次观看

  1. 当POST
  2. 时,在first_view的FirstForm中检查username/password
  3. 如果凭据正常 -- 在会话中保存一些状态
  4. 向用户发送验证码
  5. 重定向到 second_view

第二视图

  1. 检查会话中先前保存的状态
  2. 当POST
  3. 时在second_view中检查SecondForm中的代码
  4. 如果代码没问题 -- 成功!

像这样。