Сайт на Flask с базой данных

В большинстве случаев изучение бэкенд-фреймворков связано с созданием базы данных. При этом работу с БД реализуют через веб-интерфейс. На html-страницах создаются кнопки для добавления статьи, ее правки, сохранения, удаления. В приложение добавляется код, позволяющий открывать статью на редактирование по отдельному пути и т. д.

Чтобы каждый посетитель не мог вносить изменения на сайте, в веб-приложении должен быть код, который обрабатывает сессии, вход/регистрацию пользователей, разрешения для разных ролей. Вместе с этим html-шаблон будет сложнее.

Однако если сайт правит только один человек, это кажется лишним. Даже если скрыть ненужные посетителям кнопки и предоставлять доступ к редактированию только администратору, за счет разрастания кода приложение станет "тяжелее".

Решением может быть создание другого приложения, которое использует только владелец сайта и которое реализует правку базы данных. Другими словами, база данных одна, но одно приложение (работающий для пользователей сайт) обращается к ней исключительно для получения данных, второе (используемое администратором) ‒ для правки/добавления статей.

Что из себя будет представлять это "приложение администратора" ‒ вопрос предпочтений, ваших навыков разработки, удобства. Это может быть созданное под конкретный проект GUI-приложение, например, написанное на том же Tkinter, через которое вы работаете с базой данных на своем локальном компьютере.

Или в рамках этого же проекта может быть еще одно flask-приложение, которое никогда не запускается на удаленном веб-сервере. При этом редактирование БД выполняется через веб-страницу, на которой размещается форма с полями для ввода/изменения данных.

Понятно, что ничего этого можно не делать, а записи базы данных править "вручную" командами SQL. Однако это неудобно.

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

Кроме того, при разработке проекта на основе базы данных усложняется разработка и появляются дополнительные требования к знаниям. Последующие уроки данного курса предполагают, что вы хотя бы поверхностно знакомы с языком SQL, модулем sqlite3 языка Python, имеете представление об html-формах. Познакомиться с языком SQL и SQLite в частности можно в этом курсе. Там же в конце приводятся краткие сведения по модулю sqlite3 языка Python.

С другой стороны, БД дает такие возможности в случае их необходимости, как легкая систематизация данных, разные формы представления информации, реализация комментариев и др. База данных ‒ почти необходимость для крупных проектов, сайтов-магазинов, при планировании дальнейшего развития ресурса в сторону хранения каких-либо пользовательских данных.

Далее мы будем постепенно изменять копию ранее созданного проекта таким образом, чтобы flask-приложение работало с базой данных, статьи хранились не в отдельных файлах, а в таблице БД. Для этого выполним ряд подготовительных действий.

Сейчас в каталоге templates имеется файл base.html с двойным назначением. Он является родительским шаблоном для вложенных в подкаталоги файлов-страниц (которые уже не понадобятся), а также отдается сервером при запросе главной страницы.

Поскольку нам будет необходима страница с веб-формой, создадим еще один шаблон, который назовем create.html. Для поддержания единообразного вида сайта как в "режиме" правки, так и просмотра, наследовать он будет от того же base.html. При этом сам base.html придется немного изменить:

В каталоге templates создадим файл create.html:

{% extends 'base.html' %}

{% block styles_scripts %}

{% endblock %}

{% block title %}{{ h1 | default("Создать новую статью") }}{% endblock %}

{% block content %}
<p>Здесь будет форма</p>
{% endblock %}

Выражение h1 | default("Создать новую статью") означает, что когда имеется переменная h1, выводится ее значение. Если нет, отображается значение по-умолчанию. Значение h1 будет у статей при их правке, но не когда страница только создается.

Код в файле project.py пока оставим в покое. Мы исправим его после того, как напишем flask-приложение для редактирования базы данных, которое назовем admin.py:

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def index():
    return render_template('create.html')

При запуске программы командой

flask --app admin run --debug

должно получиться что-то вроде этого:

Flask для начинающих




Все разделы сайта