Подключение базы данных 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 будет выглядеть так, как показано ниже.

Вы успешно завершили оставшиеся проверки, и ваша база данных и маршруты будут работать правильно.

Рекомендации

Спасибо, что прочитали!

Удачного программирования! 👨🏻‍💻