Formularz POST
Część sekcji Formularze ścieżki Django w Coddy. Lekcja 2 z 20.
Strona /events/new/ i jej widok są gotowe, ale strona nie ma formularza do dodawania wydarzenia. Formularz, który zmienia dane, używa method="post": przeglądarka wysyła pola w treści żądania, a nie w adresie URL. Widok odczytuje je z request.POST, używając wartości każdego pola name jako klucza.
Django chroni też każdy formularz POST. Inna witryna mogłaby ukryć formularz wysyłający żądanie do twojej witryny, a przeglądarka odwiedzającego wysłałaby je razem z jego plikami cookie. Ten atak nazywa się fałszowaniem żądań między witrynami, w skrócie CSRF. Dlatego Django odrzuca każde żądanie POST bez tajnego tokenu z twojej własnej strony, zwracając 403 Forbidden. {% csrf_token %} umieszczone wewnątrz formularza zapisuje ten token. Formularz newslettera:
<form method="post">
{% csrf_token %}
<label for="email">Email</label>
<input id="email" name="email" type="email">
<button type="submit">Subscribe</button>
</form>Element <label> opisuje pole wejściowe, którego id odpowiada jego wartości for, a type="date" wyświetla kalendarz.
Wyzwanie
ŁatwyW events/templates/events/new_event.html zastąp {# Write the form here #} formularzem.
- Użyj
method="post"i umieść{% csrf_token %}jako pierwszy element. Bez niego Django odrzuci formularz, zwracając błąd 403. - Dodaj opisane etykietami pola wejściowe dla
title,date(ztype="date") iplace, a następnie przycisk przesyłania.
Dodaj wydarzenie, a następnie kliknij „Wszystkie wydarzenia”: pojawi się ono na liście.
Spróbuj swoich sił
{% extends "events/base.html" %}
{% block title %}Add an event{% endblock %}
{% block content %}
<h1>Add an event</h1>
{# Wpisz tutaj formularz #}
{% endblock %}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Formularze
Poćwicz samodzielnie: Edytor online Django