Понимание Django Forms
Я пытаюсь изучить разработку веб-сайтов на стороне сервера. В частности, я изучаю формы и получение пользовательских данных. Я пытаюсь изучить Django, но я не уверен в своем понимании процесса работы с формами Django.
Правильно ли следующее? Django forms - это приложение, которое генерирует html-форму. Пользователь на стороне клиента нажимает на кнопку, например, "Sign Up", которая затем запускает сценарий с участием Django forms. Модуль форм сгенерирует html-форму, которая будет включена в http-ответ, отправляемый обратно пользователю. Правильно ли это? Или html и Django формы конфликтуют? То есть мы можем использовать только одну? Я пытался читать документацию, но она не помогает мне понять.
TLDR: Какова схема потока для динамического сайта, где мы генерируем формы с помощью Django?
Основная концепция заключается в следующем: Django формы позволяют вам обрабатывать, обрабатывать и проверять данные, представленные клиентом через HTML-форму.
Теоретически, вам даже не нужны формы. Вы можете проверять данные любым удобным для вас способом. Но формы облегчают работу, поэтому мы их используем.
Правильно ли следующее? Django forms - это приложение, которое генерирует html-форму.
Отчасти верно. Форма в Django предназначена для обработки отправленных данных. Для отображения формы на стороне клиента вы можете написать свою собственную HTML-разметку, если хотите.
конфликтуют ли html и Django формы? То есть, мы можем использовать только одну?
Нет, вы можете представлять форму пользователю как угодно. Вы можете полностью закодировать форму в HTML, а затем на стороне сервера передать данные формы для валидации.
Дополнительные комментарии
Если вы хотите полностью контролировать отображение формы, напишите вручную всю HTML-разметку.
Если форма имеет много полей и макет не слишком сложен, вы сэкономите много времени, просто используя {{ form.as_p }}
или перебирая поля формы и рендерингуя их.
Ручное проектирование форм
Пример для формы, разработанной вручную:
<div class="form-group">
<label>Username</label>
<input
type="text"
class="form-control {% if form.username.errors %}is-invalid{% endif %}"
name="username"
placeholder="Username"
value="{{ form.username.value }}"
>
{% if form.username.errors %}
<div class="invalid-feedback">{{ form.username.errors[0] }}</div>
{% endif %}
</div>
Doing it The Django way
Вам придется объявить местодержатель, имя класса и т.д. непосредственно в классе формы.
class LoginForm(forms.Form):
error_css_class = 'is-invalid'
username = forms.CharField(
max_length=20,
widget=forms.TextInput(attrs={'placeholder': 'Username', 'class': 'form-control'})
)
А затем в шаблонах:
{% for field in form %}
<div class="form-group">
{{ field.label_tag }}
{{ field }}
{% if field.errors %}
<div class="invalid-feedback">{{ field.errors[0] }}</div>
{% endif %}
</div>
{% endfor %}