2013-02-21 1 views
0

это мой Логин FUNC в view.pyкак обновить страницу входа после того, как форма действительна сбой без подтверждения в django?

def login_user(request): 
    form = LoginForm(request.POST or None) 
    if request.method == 'POST': 
     if form.is_valid(): 
      username = form.cleaned_data['username'] 
      password = form.cleaned_data['password'] 
      user = authenticate(username=username, password=password) 
      if user is not None: 
       if user.is_active: 
        login(request, user) 
        # Redirect to a success page. 
        userprofile = UserProfile.objects.get(user = user) 
        request.session['userprofile'] = userprofile 
        request.session['familymembers'] = UserProfile.objects.filter(family = userprofile.family) 

        return redirect('/profile') 
       else: 
       # Return a 'disabled account' error message 
        messages.add_message(request, messages.ERROR, '.') 
        return redirect('/profile') 

      else: 
       messages.add_message(request, messages.ERROR, '.') 
       return render_to_response('registration/login.html',{'form':form},RequestContext(request)) 

     return render_to_response('registration/login.html', {'form': form},RequestContext(request)) 
    elif request.method == 'GET': 
     return render_to_response('registration/login.html',{'form':form},context_instance = RequestContext(request)) 

когда форма is_valid() не удалось, так же Войти страницу показал сообщения об ошибках, теперь, когда я обновить страницу, ящик из подтверждения выскочит говорит повторно форму подтвердить ,

мой вопрос: можно избежать этого подтверждените окно, я попытался

 return redirect('/', {'form': form},RequestContext(request)) 

это позволит избежать окна подтверждения, но действительное сообщение об ошибке исчезло.

+0

Пожалуйста, посмотрите пример на сайте [django] (https://docs.djangoproject.com/en/dev/topics/forms/#using-a-form-in-a-view) и сообщите, если это помогает или нет. – scriptmonster

ответ

0

Ответ на перенаправление не содержит дополнительной информации, вы можете сохранить форму в session путем сериализации form.data и получить ее позже в представлении.
Или используйте Ajax для отправки, который не делает всю страницу освежающей.

+0

извините за задержку, значит, вы имеете в виду, что это значит быть таким? для использования формы is_valid() я не могу обновить страницу формы? – paynestrike

+0

@chenliang Теперь я немного смущен. В перенаправлении будет отклонен диалог повторной отправки, но он не содержит дополнительной информации, такой как 'form' или даже' form.errors'. Таким образом, если вы хотите использовать 'form.error' после перенаправления, вам нужно сохранить его где-нибудь, например, в сеансе, в cookie или в строке запроса перенаправления. С другой стороны, да, вы не можете перенаправить страницу, чтобы использовать переменную 'form' внутри шаблона. – okm