【问题标题】:Django - Passing POST data from view to view and bugs with form validation.Django - 将 POST 数据从视图传递到视图以及表单验证的错误。
【发布时间】:2015-12-07 21:11:23
【问题描述】:

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

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

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 validation post django-forms django-views


    【解决方案1】:

    我建议你在这种情况下使用 django 会话。例如:

    第一次查看

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

    第二视图

    1. 检查会话中之前保存的状态
    2. POST 时在 second_view 中检查 SecondForm 中的代码
    3. 如果代码正常——成功!

    类似的东西。

    【讨论】:

    • 您的解决方案是对用户进行身份验证。执行上述代码的原因是第 4 步是一个重定向,即 GET 请求。如果用户点击 second_view url,我不想弹出 second_view。这将是一个毫无意义的窗口。在这种情况下,我不能使用像@login_required 这样的装饰器。如果不是由 first_view 发起,有什么方法可以阻止用户访问 second_view?
    • 请注意第 (2) 和 (5) 点。点 (2) - 您只需在会话中保存一个标志 request.session['first_view_ok'] = True(例如,您也可以在会话中保存用户名/user_pk/etc),这表明用户正确通过了 (1) 点。不要进行身份验证——只需存储一个标志。至于(5)——你应该检查request.session['first_view_ok'] == True是否转到(6),否则会报错“Authentication in FirstView required!”。
    猜你喜欢
    • 2013-06-25
    • 2022-01-15
    • 1970-01-01
    • 2013-06-24
    • 2019-05-26
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 2013-07-29
    相关资源
    最近更新 更多