Как использовать Flask для веб-разработки?

онлайн тренажер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Как использовать Flask для веб-разработки? Полное руководство

Веб-разработка на Python становится всё популярнее благодаря таким фреймворкам, как Flask. Это лёгкий, но мощный инструмент, идеально подходящий для создания как небольших сайтов, так и сложных веб-приложений. Flask прост в освоении, гибок и предоставляет разработчикам полный контроль над архитектурой проекта.

В этой статье вы узнаете, как использовать Flask для веб-разработки, разберёте структуру проектов, работу с формами, сессиями и cookie. Всё подкреплено примерами кода, которые можно сразу использовать в практике.


Что такое Flask и почему его выбирают?

Flask — это микрофреймворк для веб-разработки на Python. Его основное преимущество — минимализм и расширяемость. Он не навязывает архитектуру и позволяет использовать только необходимые компоненты.

📌 Преимущества Flask:

  • Простота и лёгкий порог входа.

  • Гибкость в выборе компонентов.

  • Большое сообщество и множество расширений (Flask-WTF, Flask-Login, Flask-Migrate и др.).

  • Подходит как для прототипов, так и для полноценного продакшн-кода.


Как установить Flask?

bash
pip install Flask

Создадим базовое приложение:

python

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return "Привет, мир!"

if __name__ == '__main__':
    app.run(debug=True)


Структура Flask проекта

Правильная структура проекта облегчает поддержку и развитие приложения. Вот стандартная структура:

arduino
my_flask_app/
├── app/
│   ├── __init__.py
│   ├── routes.py
│   ├── models.py
│   ├── forms.py
│   └── templates/
│       └── index.html
│   └── static/
├── config.py
└── run.py
  • __init__.py — инициализация приложения.

  • routes.py — маршруты приложения.

  • models.py — модели данных (если используется база данных).

  • forms.py — формы с использованием Flask-WTF.

  • templates/ — HTML-шаблоны.

  • static/ — статические файлы (CSS, JS, изображения).

  • config.py — конфигурация приложения.


Работа с формами в Flask (flask form)

Для обработки форм удобно использовать расширение Flask-WTF.

📌 Установка:

bash
pip install flask-wtf

📚 Пример формы регистрации:

python

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired

class LoginForm(FlaskForm):
    username = StringField('Имя пользователя', validators=[DataRequired()])
    password = PasswordField('Пароль', validators=[DataRequired()])
    submit = SubmitField('Войти')

📚 Обработка формы в контроллере:

python

from flask import render_template, request, redirect, url_for, flash
from app.forms import LoginForm

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        flash(f'Вход выполнен для {form.username.data}!', 'success')
        return redirect(url_for('home'))
    return render_template('login.html', form=form)


Работа с сессиями (flask sessions, flask сессии)

Сессии позволяют сохранять данные между запросами пользователя. Flask использует для этого Cookie с зашифрованным содержимым.

📚 Пример работы с сессией:

python

from flask import session

app.secret_key = 'supersecretkey'  # Для шифрования сессий

@app.route('/set_session')
def set_session():
    session['username'] = 'admin'
    return 'Сессия установлена!'

@app.route('/get_session')
def get_session():
    username = session.get('username', 'Неизвестный')
    return f'Пользователь: {username}'

  • Сессии хранятся в cookie, но зашифрованы с помощью secret_key.

  • Для удаления данных из сессии используйте session.pop('username', None).


Работа с Cookie в Flask (flask cookie, flask cookies)

Cookie позволяют сохранять данные прямо в браузере пользователя.

📚 Установка и получение Cookie:

python

from flask import make_response, request

@app.route('/set_cookie')
def set_cookie():
    resp = make_response('Cookie установлена!')
    resp.set_cookie('username', 'flask_user')
    return resp

@app.route('/get_cookie')
def get_cookie():
    username = request.cookies.get('username')
    return f'Cookie username: {username}'

  • Используйте set_cookie для установки cookie.

  • Получайте значения через request.cookies.


Пример полноценного проекта: Авторизация и работа с cookie и сессиями

python

from flask import Flask, render_template, request, redirect, url_for, session, make_response

app = Flask(__name__)
app.secret_key = 'supersecretkey'

@app.route('/', methods=['GET', 'POST'])
def home():
    if request.method == 'POST':
        username = request.form['username']
        session['username'] = username
        resp = make_response(redirect(url_for('profile')))
        resp.set_cookie('last_user', username)
        return resp
    return '''
        <form method="post">
            Имя пользователя: <input type="text" name="username">
            <input type="submit" value="Войти">
        </form>
    '''

@app.route('/profile')
def profile():
    username = session.get('username', 'Гость')
    last_user = request.cookies.get('last_user', 'Неизвестно')
    return f'Добро пожаловать, {username}! Последний вход: {last_user}'

if __name__ == '__main__':
    app.run(debug=True)


FAQ — Часто задаваемые вопросы

1. Что выбрать: Flask или Django?

Если вам нужно быстро разработать лёгкое приложение или API — используйте Flask. Для крупных проектов с готовой административной панелью и ORM — выбирайте Django.


2. Как защитить формы от CSRF-атак?

Используйте Flask-WTF, который автоматически добавляет CSRF-токены.


3. Как ограничить время действия сессии?

python
from datetime import timedelta app.permanent_session_lifetime = timedelta(minutes=30)

4. Можно ли хранить сложные объекты в сессиях?

Нет, данные в сессиях должны быть сериализуемыми (например, строки, числа).


5. Как удалить cookie?

python
resp = make_response(redirect(url_for('home'))) resp.delete_cookie('username')

6. Как подключить шаблонизатор Jinja2?

Он уже встроен в Flask. Просто создайте HTML-шаблоны в папке templates/ и используйте render_template().


Заключение

Flask — это мощный и в то же время простой инструмент для веб-разработки. Он предоставляет все необходимые инструменты для обработки форм, работы с cookie и сессиями, а благодаря гибкости позволяет создавать проекты любой сложности.

Теперь вы знаете, как строить структуру проекта, работать с формами, безопасно хранить данные в сессиях и управлять cookie. Практикуйтесь, и с каждым проектом ваши навыки будут расти!

Новости