DOMANDA Django view con form: come e perchè?

fabio_1

Utente Attivo
175
6
Hardware Utente
CPU
i5-6500
Scheda Madre
ASRock H170 Pro4S
Hard Disk
Samsung 850EVO 250GB
RAM
Corsair DD4 2133 C13 2x4GB
Scheda Video
Sapphire R9 380 4GB NITRO
Scheda Audio
Integrata + DAC Audioengine D1
Monitor
LG 24MB56HQ-B IPS
Alimentatore
XFX 550 Black
Case
Corsair Spec-03
Periferiche
Casse Edifier R1800TIII
Sistema Operativo
Windows 7
Mettiamo di avere un form nel template 'addname.html' che richiama una view

Codice:
  <form action="{% url 'lists:importname' %}" method="post">
    ...
  </form>
e quindi la view da quanto leggo dovrebbe avere una forma del genere (mi riferisco agli if...else):

Codice:
def ImportName(request):
    if request.method == 'POST':
        name_form = NameForm(request.POST)
        if name_form.is_valid():
            ...
       else:
            print('form isnt valid')
            print(name_form.errors)
            context = {}
            context['name_form'] = name_form
            return render(request, 'addname.html', context)
    else:
        print('form isnt post')
        return redirect('lists:addname')
Non mi è chiaro a cosa servano e cosa dovrei scrivere negli else.

Partiamo dal secondo che più o meno penso di aver capito: if name_form.is_valid().
Da ciò che ho capito in teoria il browser dovrebbe impedirmi di postare la form se non è compilata come si deve ma per sicurezza inserisco questo controllo. Se non è valida ritorno alla vista con gli errori stampati. In pratica è un paracadute in caso i campi siano definiti male (???) o il browser non riconosca le validazioni necessarie. Giusto?

Ora guardiamo il primo: if request.method == 'POST'.
A questa view dovrei arrivare solo usando la form ed essa ha method="post" quindi questo controllo non dovrebbe essere sempre soddisfatto?
Forse mi serve in caso qualcuno raggiri il mio codice chiamando la funzione con qualche magheggio da hacker? oppure cosa?
E in tal caso cosa dovrei fare? io ho scelto di ricaricare la vista con la form vuota ma forse merita fare altro? tentare di recuperare i dati eventualmente inseriti e riproporli nei fields? avverire che qualcosa è andato storto (in parte lo faccio con quel print ma bisogna farci caso)?

Grazie
 
Ultima modifica:

Entra

oppure Accedi utilizzando