Formularze i dane od użytkownika
Formularze to jeden z kluczowych elementów aplikacji webowych – umożliwiają użytkownikowi wprowadzanie danych, które następnie są przetwarzane po stronie serwera. Django udostępnia potężny system formularzy, który obejmuje zarówno klasyczne formularze HTML, jak i formularze automatycznie generowane na podstawie modeli.
1. Wprowadzenie do formularzy Django
Django dostarcza dwa główne mechanizmy pracy z formularzami:
Form– formularze definiowane ręcznie (polami i logiką walidacji).ModelForm– formularze generowane automatycznie na podstawie modeli wmodels.py.
Formularze w Django:
- generują kod HTML,
- walidują dane wejściowe,
- umożliwiają łatwe przypisanie danych do obiektów modeli.
Przykład prostego formularza (forms.py):
Obsługa formularza w widoku (views.py):
Szablon (contact.html):
Ważne: Django wymaga tokena CSRF (
{% csrf_token %}) przy metodzie POST, aby zabezpieczyć formularze przed atakami CSRF.
2. Walidacja danych
Każdy formularz w Django automatycznie waliduje dane na podstawie pól (CharField, EmailField, IntegerField itd.).
Typy walidacji:
- Podstawowa – sprawdzanie poprawności typu (np.
EmailFieldsprawdza format e-maila). - Długość i zakres – np.
CharField(max_length=100),IntegerField(min_value=0, max_value=10). - Własne walidatory – można dodawać własne funkcje sprawdzające.
Własny walidator pola:
Metoda clean_<pole>():
Pozwala walidować jedno konkretne pole:
Metoda clean():
Pozwala walidować zależności między polami:
3. Formularze oparte na modelach (ModelForm)
ModelForm to uproszczony sposób tworzenia formularzy, które bezpośrednio zapisują dane do bazy poprzez modele.
Przykład (forms.py):
Widok (views.py):
Szablon (add_post.html):
4. Obsługa przesyłania plików
Django obsługuje przesyłanie plików (np. zdjęć, PDF-ów) przez formularze.