Flask & Vue. SQLAlchemy, Migrate, Marshmallow, JWT. Приклад№ 2.7


07.05.2021

У цій статті: Migrate, SQLAlchemy, Marshmallow, JWT

Ми трохи розважалися з бекендом, виписуючи все власноруч. Але Ви, мабуть, вже здогадалися, що людство все це вже зробило до нас і для нас. Цей приклад - переробка бекенду з використанням сучасного інструментарію.

Міняємо backend

Що будемо використовувати і навіщо?

SQLAlchemy

Це програмне забезпечення для роботи з базами даних за допомогою мови SQL. Воно реалізує технологію програмування ORM (Object-Relational Mapping), яка пов'язує бази даних з концепціями об'єктно-орієнтованих мов програмування. SQLAlchemy дозволяє описувати структури даних і способи взаємодії з ними прямо на мові Python. Тобто, Ви не лазитимете більше у базу руками і писати SQL власноруч майже не доведеться. Написали модель - і все. Для того щоб створити або модифікувати таблиці у базі використовуємо Flask-Migrate.

Приклад опису моделі:


class Seller(db.Model):
	id = db.Column(db.Integer, primary_key = True)
	name = db.Column(db.Text)
	phone = db.Column(db.Text)
	email = db.Column(db.Text)

	def __init__(self, data):
		for field in data:
			setattr(self, field, data.get(field))

# Seller_schema
class SellerSchema(ma.Schema):
    class Meta:
        fields = ('id', 'name', 'phone', 'email')

# Schema's initializing
seller_schema = SellerSchema()
sellers_schema = SellerSchema(many = True)

Почитати: https://flask-sqlalchemy.palletsprojects.com/en/2.x/quickstart/

Flask-Migrate

Flask-Migrate - це розширення, яке обробляє міграції бази даних SQLAlchemy для програм Flask за допомогою Alembic. Операції з базою даних виконуються через інтерфейс командного рядка Flask. Після того, як ми в додатку Flask створили нову модель або модифікували існуючу, - потрібно внести зміни до бази даних. Цим і займається Flask-Migrate. Робиться це командами з командного рядка. Flask-Migrate створює скрипти, в яких є функціонал для оновлення структури бази даних (upgrade) та для повернення до попереднього стану (downgrade).

Приклад ініціалізації:


$ flask db init
$ flask db migrate -m "Initial migration."
$ flask db upgrade

Приклад оновлення бази після корекції моделі:


$ flask db migrate -m "Migration description"
$ flask db upgrade

Почитати: https://flask-migrate.readthedocs.io/en/latest/

Marshmallow

Flask-Marshmallow - це прошарок для Flask, який додає додаткові функції до marshmallow. Він також інтегрується з Flask-SQLAlchemy.

Почитати: https://flask-marshmallow.readthedocs.io/en/latest/

JWT

JWT - JSON Web Token — це відкритий стандарт для створення токенів доступу, заснований на форматі JSON. Як правило, використовується для передачі даних для аутентифікації в клієнт-серверних додатках.

JWT - сучасна система, працює з двома токенами (access token, refresh token). Після аутентифікації користувача створюються обидва токени.

  • access token - використовується для ідентифікації користувача, надсилається з кожним запитом до сервера, має малий термін дії.
  • refresh token - використовується для оновлення access token після спливання терміну його дії. Має тривалий строк дії, але може бути використаний лише один раз.

Почитати: https://pythonhosted.org/Flask-JWT/,

https://ru.wikipedia.org/wiki/JSON_Web_Token

Висновки

Що нам дало використання цих інструментів?

SQLAlchemy + Flask-Migrate + Marshmallow

Спростили і стандартизували роботу з даними, з базою даних. Якщо треба організувати роботу з іншими типами даних (не з базою даних), наприклад читання з файла, це теж можна зробити, приклад дивіться у menu.py. Для фронтенда доступ до даних буде однаковий, незалежно від того, де саме зберігаються дані.

JWT

Система з двома токенами забезпечує більшу стійкість з точки зору безпеки. До того ж токени можуть містити додаткову не критичну до витоку інформацію. Ця інформація зберігається у закодованому вигляді. Зверніть увагу! Інформація НЕ зашифрована, а закодована. Тобто, не слід у токен запихувати паролі! Цю інформацію може використовувати фронтенд. У прикладі ім'я користувача зберігається у токені, і бекенду не має потреби кожного разу витягати ці дані з бази. Фронтенд зчитує його з токена. Підмінити дані у токені не вийде, бо вони підписані цифровим підписом. Якщо цифровий підпис не буде відповідати даним, бекенд буде вважати токен недійсним.

Як запустити приклад?

  1. Завантажити архів з прикладом, розпакувати
  2. Запустити приклад командою:
    python ./run.py
    або
    python3 ./run.py
  3. У браузері відкрити посилання: http://localhost:5000/

Дивись також:

Web-dev склерозник
Коментарі:
Валерій говорить:
08.01.2022 22:20
Неочікувано було зустріти матеріал з веб розробки на сайті для палких паяльників! Дякую за метаріал, підписався на ваш блог по RSS.

Додати коментар
Code
* - обов'язкові поля

Архіви