2015-09-29 3 views
0

Когда обновляется страница, которая отправляет запрос, повторное заполнение формы. Я попробовал перенаправление после отправки запроса. но он не работает, когда запрос имеет контекст. в этом контексте есть form.errors, потому что login.html показывает ошибку формы. Как решить эту проблему? (без Структуры сообщений)Как разрешить повторное заполнение формы?

def do_login(request): 
    if request.method == 'POST': 
    form = LoginForm(request.POST) 
    if form.is_valid(): 
     email = form.cleaned_data['email'] 
     password = form.cleaned_data['password'] 
     user = authenticate(email=email, password=password) 
     if user is not None: 
     login(request, user) 
     return redirect(reverse('root')) 
    else: 
     pass 
     # redirect cannot pass context, right? 
    else: 
    form = LoginForm() 
context = { 
    'form': form 
} 
return render(request, 'accounts/login.html', context=context) 
+1

В качестве оповещения вы знаете, что вы пытаетесь сделать, поставляется [поставляется с Django] (https://docs.djangoproject.com/en/1.8/topics/auth/default/#django.contrib.auth. views.login)? – spectras

ответ

2

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

Если пользователь обновляется после неудачного сообщения, браузер обычно предупреждает пользователя о том, что их данные будут повторно отправлены. Если они повторно подтвердят, то это не имеет особого значения, логин снова завершится неудачно, и они будут видеть те же ошибки, что и раньше.

+0

Да, код может показывать ошибку. но я хочу остановить повторное заполнение формы. – Hiro3

+0

Если вы перенаправляете, чтобы предотвратить повторную отправку, вам нужно будет где-то хранить ошибки формы, например. в сеансе или получить параметры. Это будет менее надежным, чем текущий код. Почему для вас важно предотвратить повторное представление? – Alasdair