Формы и данные запросов
Обрабатывайте пользовательский ввод
«Формы и данные запросов» — бесплатный урок Python Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.
Объект request
Flask предоставляет каждому представлению доступ к глобальному объекту request, содержащему все входящие данные: поля формы, параметры запроса, JSON, заголовки и многое другое.
from flask import Flask, request
app = Flask(__name__)
# request is available inside any view
print('request carries the incoming data')Параметры строки запроса
Данные после ? в URL находятся в request.args. Используйте .get(), чтобы безопасно прочитать значение.
from flask import Flask, request
app = Flask(__name__)
@app.route('/search')
def search():
term = request.args.get('q', '')
return 'Searching for ' + term
print('/search?q=cats -> request.args')HTML-форма
Форма отправляет данные при отправке. Атрибуты method и action определяют способ и место отправки.
# <form method='POST' action='/login'>
# <input name='username'>
# <input name='password' type='password'>
# <button>Submit</button>
# </form>
print('Form posts username and password')Чтение данных формы
Отправленные поля формы поступают в request.form. Обращайтесь к ним по атрибуту name элемента ввода.
from flask import Flask, request
app = Flask(__name__)
@app.route('/login', methods=['POST'])
def login():
user = request.form['username']
return 'Welcome ' + user
print('request.form holds posted fields')Безопасный доступ с помощью get
Использование request.form['x'] вызывает ошибку, если ключ отсутствует. Предпочтительнее использовать request.form.get('x'), которое вместо этого возвращает None.
from flask import Flask, request
app = Flask(__name__)
@app.route('/login', methods=['POST'])
def login():
user = request.form.get('username')
if not user:
return 'Missing username', 400
return 'Welcome ' + user
print('.get avoids KeyError')GET и POST в одном представлении
Распространённый шаблон: показывать форму при GET и обрабатывать данные при POST — всё в одном представлении.
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/contact', methods=['GET', 'POST'])
def contact():
if request.method == 'POST':
return 'Thanks, ' + request.form.get('name', 'friend')
return render_template('contact.html')
print('One view, two methods')Проверка входных данных
Никогда не доверяйте пользовательским данным. Перед использованием проверьте, что обязательные поля существуют и содержат разумные значения.
from flask import Flask, request
app = Flask(__name__)
@app.route('/age', methods=['POST'])
def age():
raw = request.form.get('age', '')
if not raw.isdigit():
return 'Age must be a number', 400
return 'Age is ' + raw
print('Validate before trusting input')Чтение JSON
Клиенты API часто отправляют JSON. request.get_json() разбирает тело запроса в словарь Python.
from flask import Flask, request
app = Flask(__name__)
@app.route('/api', methods=['POST'])
def api():
data = request.get_json()
return 'Got name ' + data.get('name', '?')
print('get_json parses the JSON body')Загрузка файлов
Загруженные файлы находятся в request.files. Сохраните один из них с помощью его метода .save() после проверки.
from flask import Flask, request
app = Flask(__name__)
@app.route('/upload', methods=['POST'])
def upload():
f = request.files.get('photo')
if f:
return 'Received ' + f.filename
return 'No file', 400
print('request.files holds uploads')Перенаправление после POST
После обработки формы перенаправьте пользователя, чтобы избежать повторной отправки при обновлении страницы. Используйте redirect(url_for(...)).
from flask import Flask, redirect, url_for
app = Flask(__name__)
@app.route('/done')
def done():
return 'All done'
@app.route('/save', methods=['POST'])
def save():
return redirect(url_for('done'))
print('Post/Redirect/Get pattern')Flash-сообщения
flash() сохраняет одноразовое сообщение, показываемое после перенаправления. Это удобно для подтверждений вроде «Успешно сохранено».
from flask import Flask, flash, redirect, url_for
app = Flask(__name__)
app.secret_key = 'change-me'
@app.route('/save', methods=['POST'])
def save():
flash('Saved successfully')
return redirect(url_for('save'))
print('flash shows a one-time message')Проверка
Проверьте свои знания об обработке форм.
Повторение
Вы научились обрабатывать пользовательские данные во Flask.
request.argsиспользуется для параметров строки запроса, аrequest.form— для полей формыrequest.get_json()используется для JSON-тел, аrequest.files— для загружаемых файлов- Всегда проверяйте входные данные и используйте
.get()для безопасного доступа - Используйте схему Post/Redirect/Get и
flash()для удобного взаимодействия с приложением
Часто задаваемые вопросы
Урок «Формы и данные запросов» бесплатный?
Да — полный текст урока «Формы и данные запросов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.
Чему я научусь в уроке «Формы и данные запросов»?
Обрабатывайте пользовательский ввод Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Python Academy?
Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Формы и данные запросов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Python Academy?
Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Маршруты и представления
- Шаблоны с Jinja2
- Формы и данные запросов
- Создание REST-конечной точки