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.pypython3 ./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.
Tags
pmsm mongodb bme280 bmp280 exti nodemcu timer ssd1331 dma sms meteo max1674 foc stm32 i2c eeprom adc usart git java-script programmator ssd1306 watchdog nvic html flask raspberry-pi st-link mpu-9250 remap examples rs-232 hih-4000 css rtc bkp bluetooth bldc motor esp8266 mpu-6050 encoder capture soldering ngnix wifi usb flash rfid displays tim battery avr smd websocket 3d-printer barometer books lcd python servo eb-500 atmega web pwm piezo mpx4115a uart dht11 solar gps options dc-dc ethernet brushless docker sensors gpio led
Архіви