Создание базы данных
Для работы с базой данных, её необходимо создать. Импортируем класс SQLAlchemy из библиотеки flask_sqlalchemy:
from flask_sqlalchemy import SQLAlchemy
Создадим объект db и настроим подключение к базе данных SQLite:
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db'
db = SQLAlchemy(app)
sqlite:///blog.db указывает на базу данных SQLite с именем blog.db. Для других баз данных (PostgreSQL, MySQL и др.) следует изменить строку подключения. SQLite выбрана из-за простоты.
Создание модели данных
Создадим класс Article, представляющий таблицу статей:
class Article(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
intro = db.Column(db.String(300), nullable=False)
text = db.Column(db.Text, nullable=False)
date = db.Column(db.DateTime, default=datetime.utcnow)
def __repr__(self):
return f'<Article {self.id}>'
Описание структуры таблицы:
- id: Уникальный идентификатор статьи (целое число).
- title: Заголовок статьи (строка, максимум 100 символов, обязательное поле).
- intro: Вступительный текст (строка, максимум 300 символов, обязательное поле).
- text: Основной текст статьи (текстовое поле для больших объемов текста).
- date: Дата публикации (дата и время, по умолчанию — текущее время).
- __repr__: Метод для удобного представления объекта статьи.
Создание таблицы
Для создания таблицы, в интерактивном режиме Python (запустив python в терминале), выполните:
from app import db
db.create_all()
Это создаст файл blog.db в вашем проекте.
Страница добавления статьи
Создадим URL-адрес /create-article и функцию-обработчик:
@app.route('/create-article', methods=['POST', 'GET'])
def create_article():
if request.method == 'POST':
title = request.form['title']
intro = request.form['intro']
text = request.form['text']
article = Article(title=title, intro=intro, text=text)
try:
db.session.add(article)
db.session.commit()
return redirect('/')
except:
return "При добавлении статьи произошла ошибка"
else:
return render_template('create-article.html')
В create-article.html разместим форму:
<form method="POST">
<input type="text" name="title" placeholder="Название статьи" class="form-control"><br>
<input type="text" name="intro" placeholder="Вступительный текст" class="form-control"><br>
<textarea name="text" placeholder="Текст статьи" class="form-control"></textarea><br>
<button type="submit" class="btn btn-success">Отправить</button>
</form>
Отключение предупреждения SQLAlchemy
Для отключения предупреждения SQLAlchemy о deprecated SQLAlchemy.engine.url.make_url в файле app.py добавьте:
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
Создан функционал добавления статей в базу данных SQLite с использованием Flask и SQLAlchemy. Пример демонстрирует простой способ работы с базами данных в веб-приложениях на Flask. Функционал можно расширить, добавив отображение, редактирование и удаление статей.