Подключение базы данных SQLite к приложению Flask через SQLAlchemy | Интеграция Flask WTForms
Введение
Это вторая часть этой серии, и в этой статье я собираюсь завершить остальные проверки с того места, на котором мы остановились в части 1. Если вы в любом случае пропустили предыдущую часть, перейдите по ссылке ниже и обратитесь к нему, прежде чем продолжить.
Как я упоминал в предыдущей статье, я собираюсь установить Flask WTForms и создать отдельные файлы конфигурации forms
и models
. Но перед этим я собираюсь создать новый каталог внутри корневого каталога моего приложения с тем же именем, что и у корневого каталога.
root directory -> Flask_DB directory inside -> Flask_DB
Перемещение существующих файлов в новый каталог
Нам нужно переместить существующие каталоги statis
, templates
и sqlite DB
во вновь созданный каталог Flask_DB
.
После этого нам нужно создать 3 файла конфигурации Python, такие как forms.py
, models.py
и routes.py
внутри этого каталога.
Затем мы создаем еще один файл конфигурации Python с именем __init__.py
внутри каталога. Теперь мы добавили все необходимые файлы конфигурации в каталог, и когда вы запустите команду tree
, он должен выглядеть так.
. ├── __init__.py ├── db.sqlite3 ├── forms.py ├── models.py ├── routes.py ├── static └── templates ├── base.html ├── home.html ├── login.html └── register.html
Но все же наш файл конфигурации app.py
находится внутри корневого каталога, и нам нужно переименовать его как run.py
. Теперь мы почти закончили с перемещением и переименованием файлов конфигурации. Итак, мы можем начать обновлять существующие файлы, чтобы завершить часть проверки нашего приложения.
Обновление run.py file
Здесь нам нужно установить этот файл в качестве отправной точки и переместить другие конфигурации в наши вновь созданные файлы конфигурации. Итак, файл newrun.py
будет таким, как показано ниже.
[Если вы установили файл .flaskenv
в своем приложении, его также необходимо изменить, как показано ниже]
FLASK_ENV=development FLASK_APP=run.py
Обновление файла __init__.py
Новый файл конфигурации __init__.py
будет выглядеть так, как показано ниже, и здесь мы переместили все models
и routes
в разные файлы конфигурации, а остальные будут находиться здесь.
Обновление файла models.py
Ранее мы создавали наши пользовательские модели в файле конфигурации app.py
. Мы можем напрямую переместить этот раздел в файл конфигурации models.py
и импортировать необходимые пакеты, как показано во фрагменте кода ниже.
Установка Flask WTForms
Используя Flask WTForms, мы можем легко создавать формы и отображать их в HTML
файлах конфигурации. Ранее мы настроили наши страницы registration
и login
, используя общие элементы HTML
и файл Bootstrap
. Но когда вы устанавливаете Flask WTForms, вы можете очень легко их генерировать.
Итак, прежде всего вам нужно установить Flask WTForms внутри вашей виртуальной среды, а затем мы можем начать создавать свои собственные формы внутри файла forms.py
. Чтобы установить Flask WTForms, используйте приведенную ниже команду.
pip install Flask-WTF
Затем добавьте приведенный ниже код в файл конфигурации forms.py
.
Теперь мы успешно создали наши формы, а затем нам нужно изменить файлы register.html
и login.html
в соответствии с нашей формой. Используйте приведенный ниже фрагмент кода [Дополнительную информацию о Flask WTForms можно найти на этом веб-сайте].
Добавление проверок
В нашем приложении Flask нам необходимо обеспечить, чтобы одно имя пользователя или один адрес электронной почты не дублировались двумя пользователями. Проще говоря, имя пользователя и адрес электронной почты являются уникальными полями и не могут повторяться внутри базы данных.
Чтобы гарантировать это, мы можем применить следующие функции к файлу forms.py
для проверки этих двух условий, как показано ниже.
def validate_username(self, username): user = User.query.filter_by(username=username.data).first() if user: raise ValidationError('That username is taken. Please choose a different one.') def validate_email(self, email): user = User.query.filter_by(email=email.data).first() if user: raise ValidationError('That email is taken. Please choose a different one.')
Таким образом, завершенный файл forms.py
будет выглядеть следующим образом.
Обновление файла route.py
Наконец, мы подошли к нашему файлу routes.py
, и это файл конфигурации, в котором у нас есть все наши маршруты в приложении. Этот файл содержит тот же маршрут, что и ранее, но нам нужно изменить в этом файле маршруты login
и register
.
Давайте сначала создадим наш маршрут register
.
@app.route('/register', methods=['GET', 'POST']) def register(): form = RegistrationForm() if form.validate_on_submit(): username = form.username.data email = form.email.data password = form.password.data new_user = User(username=username, email=email, password=password) db.session.add(new_user) db.session.commit() flash('Successfully Registered!, You are now able to log in', 'success') return redirect(url_for('login')) return render_template('register.html', title='Register', form=form)
Затем мы можем начать изменять маршрут login
.
@app.route('/login', methods=['GET', 'POST']) def login(): form = LoginForm() if form.validate_on_submit(): user = User.query.filter_by(email=form.email.data).first() if user and user.password == form.password.data: return redirect(url_for('home')) else: flash('Login Unsuccessful. Please check username and password', 'danger') return render_template('login.html', title='Login', form=form)
Итак, наш готовый файл routes.py
будет выглядеть так, как показано ниже.
Вы успешно завершили оставшиеся проверки, и ваша база данных и маршруты будут работать правильно.
Рекомендации
Спасибо, что прочитали!
Удачного программирования! 👨🏻💻