Как написать валидацию хорошей формы в Django? - PullRequest
1 голос
/ 11 декабря 2010

Я видел образцы Джанго и вижу, что они имеют приличную обработку ошибок.Однако я хочу посмотреть, есть ли еще лучший подход, общий шаблон для обработки ошибок проверки формы в Django.Это образец, который я нашел здесь :

def contact(request):
    if request.method == 'POST': # If the form has been submitted...
        form = ContactForm(request.POST) # A form bound to the POST data
        if form.is_valid(): # All validation rules pass
            # Process the data in form.cleaned_data
            # ...
            return HttpResponseRedirect('/thanks/') # Redirect after POST
    else:
        form = ContactForm() # An unbound form

    return render_to_response('contact.html', {
        'form': form,
    })

В частности, мне было интересно:

  1. Как можно посмотреть в "/ спасибо/ "быть уверенным, что форма была проверена?Существуют ли какие-либо распространенные способы передачи успешной проверки формы для следующего просмотра?Или мне нужно сделать что-то вручную, например, установить флаг в сеансе запроса?

  2. Как можно написать этот код так, чтобы форма НЕ действительна и страница отображалась сошибки при отправке, если пользователь обновляет браузер, он не спрашивает пользователя, хотят ли они снова отправлять данные?

РЕДАКТИРОВАТЬ: Что касается # 1 IЯ имею в виду случаи, когда пользователь вручную вводит URL '/ thanks /' или перебирает страницы истории и случайно открывает его без проверки какой-либо формы.(Мы все еще показываем страницу «спасибо»? Или нам нужно как-то еще раз подтвердить, почему мы видим «спасибо»).

Ответы [ 2 ]

1 голос
/ 11 декабря 2010

Как представление в "/ спасибо /" может быть уверено, что форма была проверена?

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

Как можно написать этот код таким образом, чтобы, когда форма НЕ действительна и страница отображалась с ошибками при отправке, если пользователь обновляет браузер, он не спрашивает пользователя, хотят ли они снова отправлять данные POST?

Я не уверен, какой смысл. Форма содержит ошибки и пользователь может их исправить или оставить. Чтобы отобразить страницу, которая не требует повторной отправки формы, можно использовать перенаправление, как в действительном случае. В этом случае разметка ошибки должна быть сделана вручную.

1 голос
/ 11 декабря 2010
  1. Представление может быть уверенным, что форма проверена, поскольку она будет вызываться только в том случае, если форма действительна ...

  2. Если страница создается с помощью запроса на публикацию, браузер всегда будет запрашивать у вас, что при нажатии кнопки «Обновить» ... я думаю, что единственный способ избежать этого - перенаправление на другую страницу!

...