Подключение базы данных SQLite к приложению Flask через SQLAlchemy
Введение
В этом руководстве я объясню, как вы можете подключить базу данных к приложению Flask с помощью SQLAlchemy. В одной из моих предыдущих статей я описал, как начать разработку приложений с помощью Flask. Так что эту статью можно считать ее расширенной версией. Потому что после этого урока вы сможете добавить базу данных в свое приложение. Если вы пропустили мою предыдущую статью, пожалуйста, перейдите по ссылке ниже.
Начните с базового приложения Flask
В этой статье я собираюсь установить необходимые пакеты в виртуальной среде. Вы можете легко активировать виртуальную среду для своего приложения с помощью приведенных ниже команд [Я настоятельно рекомендую вам обратиться к приведенной выше статье, прежде чем настраивать среду разработки для этого руководства].
$ virtualenv env $ source env/bin/activate Once you activate the virtual environment, you can install flask in it. $ pip install flask
Затем мы можем настроить наше приложение фляги с помощью основных файлов конфигурации, как показано ниже.
Теперь все наши файлы конфигурации готовы; затем мы можем начать подключать базу данных к нашему фляжному приложению.
Создание базы данных
Давайте установим SQLAlchemy в виртуальную среду, используя следующую команду.
$ pip install Flask-SQLAlchemy
Затем мы можем импортировать SQLAlchemy в наш файл app.py
и начать создавать базу данных. Для этого руководства я использую базу данных SQLite3, и конфигурации будут следующими.
from flask_sqlalchemy import SQLAlchemy # database app.config[‘SQLALCHEMY_DATABASE_URI’] = ‘sqlite:///db.sqlite3’ app.config[‘SQLALCHEMY_TRACK_MODIFICATIONS’] = False db = SQLAlchemy(app)
Далее нам нужно создать модель для нашей базы данных. Таким образом, конфигурация может быть выполнена следующим образом.
class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(20), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) password = db.Column(db.String(60), nullable=False) date_registered = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
Настройка маршрутов регистрации и входа
Как только мы закончим создание базы данных, мы можем приступить к настройке маршрутов регистрации и входа следующим образом.
Перед настройкой этих маршрутов обязательно импортируйте request, redirect, flash, url_for
пакеты в ваш app.py
.
Инициализация базы данных и отображение зарегистрированных пользователей на домашней странице
В SQLAlchemy мы можем инициализировать базу данных с помощью следующей команды. Мы можем настроить эту команду в маршруте, чтобы после перехода на домашнюю страницу она автоматически инициализировала нашу базу данных и была готова хранить записи.
db.create_all()
Кроме того, поскольку нам нужно отобразить всех зарегистрированных пользователей на домашней странице с их данными, мы можем запросить доступных пользователей, используя приведенную ниже команду.
User.query.all() # here 'User' is our model name (eg: class User())
Затем мы можем передать этот запрос с домашним маршрутом, чтобы он отображал всех зарегистрированных пользователей на странице.
@app.route('/') def home(): db.create_all() return render_template('home.html', title='Home', users=User.query.all())
После этого нам нужно изменить наш файл конфигурации home.html
, чтобы отобразить информацию о пользователях. Я использую для этого команды наследования шаблонов Jinja2
следующим образом.
{% for user in users %} <p> {{ user.id }}<br /> {{ user.username}} <br /> {{ user.email }}<br /> {{ user.password }}<br /> {{ user.date_registered }} </p> {% endfor %}
Добавление сообщений об успешной регистрации пользователя и логировании
Я изменил файлы конфигурации home.html
и login.html
, чтобы отображать сообщения о регистрации пользователя и ведении журнала следующим образом. Я добавил одну и ту же команду ниже в два файла конфигурации.
{% with messages = get_flashed_messages(with_categories=true) %} {% if messages %} {% for category, message in messages %} <div class="alert alert-{{ category }}"> {{ message }}</div> {% endfor %} {% endif %} {% endwith %}
Проверка
В этом фляжном приложении нам нужна пара проверок, чтобы убедиться, что мы не получаем ошибок при запуске приложения.
Итак, первая проверка заключается в том, что при регистрации пользователя он/она должен ввести один и тот же пароль для полей password
и confirm password
.
Давайте добавим эту проверку в наш файл конфигурации register.html
.
<script> var password = document.getElementById("password"), confirm_password = document.getElementById("confirm_password"); function validatePassword(){ if(password.value != confirm_password.value) { confirm_password.setCustomValidity("Passwords Don't Match"); } else { confirm_password.setCustomValidity(''); } } password.onchange = validatePassword; confirm_password.onkeyup = validatePassword; </script>
В следующей части этой серии я немного обновлю приложение, настрою Flask WTForms и добавлю отдельные формы и модели, чтобы обеспечить следующие проверки.
В следующем уроке я собираюсь проверить, пытается ли новый пользователь зарегистрироваться с существующим именем пользователя или адресом электронной почты; если это так, нам нужно избежать этой регистрации и сообщить пользователю выбрать другое имя пользователя или адрес электронной почты. Эта проверка довольно проста с WTForms, поэтому мы сосредоточимся на ней во второй части.
Спасибо, что прочитали!
Удачного программирования 👨🏻💻