Guida alle richieste HTTP POST con Django
Benvenuto in questa guida all’elaborazione e alla validazione dei dati POST con Django.
In questa breve guida andremo a spiegare come effettuare la validazione di dati POST di un form, il tutto utilizzando Python e Django
Partiamo subito.
Questo è il nostro from di Django:
from django import forms class MioForm(forms.Form): primo = forms.CharField(label='Primo campo', max_length=100) secondo = forms.IntegerField(label='Secondo campo', max_length=100) terzo = forms.IntegerField(label='Terzo campo', max_length=100)
Dunque possiamo creare il nostro form in HTML:
<form action="/applicazione/url-della-tua-views/" method="post">
{% csrf_token %}
<label for="primo">Primo campo: </label>
<input id="primo" type="text" name="primo" maxlength="100" required />
<label for="secondo">Secondo campo: </label>
<input id="secondo" type="text" name="secondo" maxlength="100" required />
<label for="terzo">Terzo campo: </label>
<input id="terzo" type="text" name="terzo" maxlength="100" required />
<input type="submit" value="Submit" />
</form>Oppure possiamo renderizzarlo con {{form}}, è uguale:
<form action="/applicazione/views-di-prova/" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Invia dati" />
</form>Tra i due esempi di codice HTML preferisco il primo, perchè rende più facile aggiungere il CSS ai vari elementi (nel secondo caso come vedete noi mettiamo {{form}} ed è Django a scrivere l’HTML al nostro posto). Andiamo avanti.
Ecco come sarà il views.py della nostra applicazione
def validazione_form(request): # Ovviamente l'urls.py rimanda l'url /applicazione/views-di-prova/ a questa views
if request.method == 'POST':
form = MioForm(request.POST, request.FILES)
if not form.is_valid():
# stampa qualche errore qui
else:
primo_campo = request.POST.get("primo", "")
secondo_campo = request.POST.get("secondo", "")
terzo_campo = request.POST.get("terzo", "")
# ok, fai quello che devi fareFatto, ecco spiegato brevemente quello che succede: al click sul pulsante “Invia dati” viene inviata una richiesta HTTP Post all’indirizzo “<vostro_sito>/applicazione/views-di-prova/”. Il tuo urls.py rimanda alla views qui mostrata che attaverso la funzione is_valid() permette di capire se il form è stato validato correttamente o meno.
In questo caso abbiamo raccolto i dati da un form ma la procedura e identica per qualsiasi richiesta HTTP POST: con “if request.method == ‘POST’:” verifichiamo, nella views, che si tratti di una chiamata post e raccogliamo i vari dati con request.POST.get().
Ovviamente si possono anche effettuare chiamate AJAX dal client per poi dal server ritornare una HttpResponse con una parola o del testo in JSON.
Se vuoi vedere come fare per validare ciascun campo del form in modo particolare (es. un numero che deve essere compreso tra 0 e 20) guarda la nostra guida.
Alla prossima!
