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