Un modulo POST
Fa parte della sezione Form del percorso Django di Coddy. Lezione 2 di 20.
La pagina /events/new/ e la relativa vista sono pronte, ma nella pagina non c'è alcun modulo per aggiungere un evento. Un modulo che modifica i dati usa method="post": il browser invia i campi nel corpo della richiesta, non nell'URL. La vista li legge da request.POST, identificandoli tramite il name di ciascun input.
Django protegge anche ogni modulo POST. Un altro sito web potrebbe nascondere un modulo che invia dati al tuo sito, e il browser del visitatore lo invierebbe insieme ai suoi cookie. Questo attacco si chiama falsificazione delle richieste tra siti, abbreviata in CSRF. Perciò Django rifiuta qualsiasi POST privo di un token segreto proveniente dalla tua pagina, mostrando 403 Forbidden. {% csrf_token %} all'interno del modulo inserisce quel token. Un modulo per una newsletter:
<form method="post">
{% csrf_token %}
<label for="email">Email</label>
<input id="email" name="email" type="email">
<button type="submit">Subscribe</button>
</form>Un <label> indica l'input il cui id corrisponde al suo for, mentre type="date" visualizza un calendario.
Sfida
FacileIn events/templates/events/new_event.html, sostituisci {# Write the form here #} con un modulo.
- Usa
method="post"e inserisci prima{% csrf_token %}. Senza di esso, Django rifiuta il modulo con un errore 403. - Aggiungi un campo di input con etichetta per
title,date(contype="date") eplace, poi un pulsante di invio.
Aggiungi un evento, poi premi Tutti gli eventi: sarà nell’elenco.
Provalo tu
{% extends "events/base.html" %}
{% block title %}Add an event{% endblock %}
{% block content %}
<h1>Add an event</h1>
{# Scrivi il modulo qui #}
{% endblock %}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Form
Esercitati da solo: Playground Django