Зарегистрируйтесь, чтобы продолжить обучение

Персистентность Python: Веб-разработка (Flask)

Среди сайтов выделяют «статические» — сайты, которые представляют собой готовый набор HTML-страниц. Например, так сделаны наши руководства на https://guides.hexlet.io/ru/. Удобно, быстро и дешево. Статическим сайтам не нужно куда-то сохранять информацию, их данные хранятся прямо в HTML.

Чтобы создать статические сайты, используют специальные генераторы, например, https://jekyllrb.com/.

Остальным сайтам повезло меньше. Всё, что создается пользователем, нужно куда-то сохранять. Самый простой способ сохранять — использовать файлы. Насколько он простой, настолько же нерабочий. Блокировки файловой системы не позволят работать с файлом в конкурентной среде. Такой средой является веб, когда с сайтом могут одновременно работать сотни тысяч пользователей.

Поэтому важно понимать устройство операционных систем. https://ru.hexlet.io/pages/recommended-books

Возможность долговременного хранения состояния называется персистентностью. Для персистентного или постоянного хранения данных принято использовать специализированные программы — базы данных. Взаимодействие с ними строят двумя способами:

  • Напрямую через библиотеку, которая предназначена для данной базы данных
  • Через ORM, которая в большинстве случаев прячет базу данных за большим количеством абстракций
# SQLAlchemy ORM

user = User(
    username=request.form["username"],
    email=request.form["email"],
)
db.session.add(user)
db.session.commit()

Тема хранения данных очень глубока и требует определенной подготовки. Но профессия построена так, чтобы мы как можно быстрее добрались до веба и научились с ним работать. По этой причине в следующих уроках данные пользователя будут сохраняться в сессии — механизм работающий поверх Cookie. Это будет делаться через предоставленную абстракцию репозитория:

from flask import Flask

from data import UserRepository

app = Flask(__name__)
# Секретный ключ, который используется для криптографической подписи файла сессии
app.config["SECRET_KEY"] = os.getenv("SECRET_KEY")

# Хранилище объектов
repo = UserRepository()

# Сохранение
repo.save(user)

# Ещё одно сохранение
repo.save(user2)

# Извлечение по идентификатору
repo.find(user.id)  # => user

# Извлечение всех сущностей
repo.content()  # => [user, user2]

Репозиторий отвечает за хранение конкретной сущности. Для каждой свой: пользователи — UserRepository, машины — CarRepository и так далее.

Все репозитории в следующих уроках созданы специально для этого курса. Они не являются частью фреймворка Flask или ORM. Исходные файлы любого репозитория доступны в практике.

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff