Flask для школьниковГлава 5 из 10
SilverTests.ru · Курс веб-разработкиФормы и POST
Формы и POST
Пользователь отправляет данные — сервер их обрабатывает
После выполнения предыдущей главы у тебя есть base.html, список привычек выводится циклом из Python-списка.
Цель
Добавить форму на страницу. Обработать данные из формы на сервере через request.form. Понять метод POST и отличие от GET.
📝 Техзадание
На странице /habits появляется поле ввода и кнопка «Добавить». Вводишь «Йога» → нажимаешь → привычка появляется в списке. Данные хранятся на сервере в памяти.
1GET vs POST
До сих пор все наши запросы были GET — браузер просит страницу, сервер отдаёт. Но когда пользователь отправляет данные (форму, файл), используется POST.
| |
GET |
POST |
| Для чего |
Получить данные |
Отправить данные |
| Данные |
В URL (?name=Йога) |
В теле запроса (скрыты) |
| Пример |
Открыть страницу |
Отправить форму |
2Схема: форма → сервер → redirect
— POST /add →
request.form
🗃 Flask
добавляет в список
💻 Браузер
обновлённый список
3Код: обработчик на сервере
from flask import Flask, render_template, request, redirect
app = Flask(__name__)
habits_list = [ {"name": "Бег", "done": False}, {"name": "Чтение", "done": False}, ]
@app.route('/add', methods=['POST'])
def add_habit():
name = request.form['habit_name'] # данные из формы
if name.strip():
habits_list.append({"name": name, "done": False})
return redirect('/habits') # назад к списку
4Код: форма в шаблоне
<!-- добавить в habits.html внутри {% block content %} -->
<form method="POST" action="/add">
<input type="text" name="habit_name" placeholder="Новая привычка">
<button type="submit">Добавить</button>
</form>
name="habit_name" в HTML ↔ request.form['habit_name'] в Python. По этому имени Flask находит данные из формы.
Важно: methods=['POST'] обязателен. Без него Flask вернёт ошибку 405 (Method Not Allowed), потому что по умолчанию маршрут принимает только GET.
Обрати внимание: после добавления привычки страница перезагружается целиком (redirect). В главе 7 мы научимся обновлять данные без перезагрузки — через JavaScript.