Flask & Vue. SQLAlchemy, Migrate, Marshmallow, JWT. Приклад№ 2.7
Міняємо 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
Система з двома токенами забезпечує більшу стійкість з точки зору безпеки. До того ж токени можуть містити додаткову не критичну до витоку інформацію. Ця інформація зберігається у закодованому вигляді. Зверніть увагу! Інформація НЕ зашифрована, а закодована. Тобто, не слід у токен запихувати паролі! Цю інформацію може використовувати фронтенд. У прикладі ім'я користувача зберігається у токені, і бекенду не має потреби кожного разу витягати ці дані з бази. Фронтенд зчитує його з токена. Підмінити дані у токені не вийде, бо вони підписані цифровим підписом. Якщо цифровий підпис не буде відповідати даним, бекенд буде вважати токен недійсним.
Як запустити приклад?
- Завантажити архів з прикладом, розпакувати
- Запустити приклад командою:
абоpython ./run.py
python3 ./run.py
- У браузері відкрити посилання: http://localhost:5000/
Дивись також:
- Flask & Vue. Приклад# 2.1
- Flask & Vue. Приклад# 2.2 Frontend - Зручна навігація
- Flask & Vue. Приклад# 2.3 Серверна пагінація, пошук, сортування даних
- Flask & Vue. Приклад# 2.4 Проста аутентифікація
- Flask & Vue. Приклад# 2.5 Авторизація
- Flask & Vue. Приклад# 2.6 Кастомні компоненти
- Flask & Vue. Приклад# 2.7 SQLAlchemy, Migrate, Marshmallow, JWT
- Flask & Vue. Використання систем збірки проекту. Webpack
- Flask & Vue. OAuth. Facebook / Google Account
- Flask & Vue. Завантаження файлів
Неочікувано було зустріти матеріал з веб розробки на сайті для палких паяльників! Дякую за метаріал, підписався на ваш блог по RSS.
Недавні записи
- LCD Display ST7567S (IIC)
- Розпізнавання мови (Speech recognition)
- Selenium
- Комп'ютерний зір (Computer Vision)
- Деякі думки про точність вимірювань в електроприводі
- Датчики Холла 120/60 градусів
- Модуль драйверів напівмосту IGBT транзисторів
- Драйвер IGBT транзисторів на A316J
- AS5600. Варіант встановлення на BLDC мотор
- DC-DC для IGBT драйверів ізольований 2 W +15 -8 вольт
Tags
battery soldering java-script ngnix adc rs-232 flask esp8266 watchdog web exti solar mongodb rtc sms pwm usart books ethernet smd git websocket meteo css python dc-dc displays led ssd1306 eeprom gpio barometer max1674 mpx4115a brushless motor mpu-6050 timer sensors remap servo bldc atmega pmsm 3d-printer flash encoder examples dma raspberry-pi tim ssd1331 piezo mpu-9250 rfid eb-500 foc bme280 gps nvic dht11 bluetooth hih-4000 stm32 st-link docker uart avr html wifi bmp280 bkp nodemcu options usb lcd programmator i2c capture
Архіви