401. Jaki jest drugi (poza formularzami HTML) sposób użycia Formularzy Django (django.forms)?

Programistycznie w kodzie, bez renderowania HTML – formularze możesz wykorzystywać jako narzędzie do walidacji danych w Twojej aplikacji.
Niezależnie od tego, czy dane pochodzą od użytkownika, czy są generowane automatycznie w kodzie.

To oznacza, że możesz korzystać z formularzy Django tylko do walidacji danych, bez potrzeby tworzenia i wyświetlania ich w interfejsie HTML.
Formularze Django są potężnym narzędziem walidacji danych, działającym: dla danych przesyłanych przez użytkowników, jak i danych generowanych w backendzie.
Jak korzystać z formularzy Django bez HTML?

# Załóżmy, że masz model Post z polem SlugField, który wymaga poprawnego formatu sluga:

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)
    slug = models.SlugField(unique=True, max_length=200)
    content = models.TextField()


I teraz chcesz upewnić się, że dane (np. zewnętrzne API lub ręcznie dodane w kodzie) mają poprawny format,
zanim zapiszesz je w bazie danych. Możesz użyć formularza do walidacji danych programistycznie:

from django import forms
from .models import Post

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'slug', 'content']

# Dane, które chcesz zweryfikować (np. dane wejściowe od zewnętrznego źródła)
data = {
    'title': 'Przykładowy post',
    'slug': 'Nieprawidłowy Slug!',  # Niepoprawny format
    'content': 'Treść przykładowego posta',
}

# Utworzenie instancji formularza z danymi
form = PostForm(data=data)

if form.is_valid():
    # Dane są poprawne, można je zapisać
    post = form.save()
    print(f"Zapisano post: {post}")
else:
    # Dane są niepoprawne – wyświetl błędy
    print(f"Błędy walidacji: {form.errors}")


Formularz automatycznie sprawdza:

    Czy dane są zgodne z wymaganiami modelu (SlugField wymaga poprawnego formatu sluga).
    Czy dane są kompletne i spełniają inne ograniczenia (np. maksymalną długość pól).

Jeśli dane są poprawne, można je zapisać w bazie (form.save()).
Jeśli dane są błędne, formularz wygeneruje szczegółowe błędy walidacji, które można obsłużyć.

Kiedy warto używać formularzy bez HTML?
 - gdy pobierasz dane z API, plików CSV lub innych systemów, możesz użyć formularzy Django do ich walidacji przed zapisaniem w bazie danych
 - jeśli w Twoim kodzie generujesz dane dynamicznie (np. na podstawie algorytmów lub obliczeń), formularze mogą pomóc w upewnieniu się, że
   dane są zgodne z regułami Twojego modelu
 - formularze są świetnym narzędziem do testowania walidacji modelu w kodzie