При строительстве мы строим приложения, которые обрабатывают пользователям, многие функциональные возможности зависит от хранения переменных сеансов для пользователей. Рассмотрим типичную Checkout Cart: довольно часто, что заброшенная тележка на любом веб-сайте электронной коммерции сохранит его содержимое долго после того, как пользователь оставил. Тележки иногда даже у их содержимого сохраняются на устройствах! Чтобы создать такую функциональность, мы не можем полагаться на метод Flask по умолчанию для хранения переменных сеансов, что происходит через локально сохраненные файлы cookers. Вместо этого мы можем использовать магазин Cloud Key/Value, например Redis и используйте плагин под названием Флэк-сессия Отказ
Flask-Session – это плагин для колба, который позволяет простую интеграцию методов используемого кэша на стороне сервера, таких как Redis , Memcached , Монгодб , Реляционные базы данных , и так далее. Из этих вариантов Redis является исключительно привлекательным вариантом.
Redis Является ли DataStore NoSQL DataStore в C, предназначенный для временного временного хранения данных в памяти для пользователей, так как они берут в ваш сайт. Redis был разработан для этой цели, чрезвычайно быстрый, и он может свободно использовать при врате на бесплатный экземпляр на Redis Labs .
Признакомиться с Flask-Session
Чтобы понять предложение Flask-Session, хорошее место для начала – пика в настройках, которые принимают фляс-сеанс:
Даже на первый взгляд, это довольно легко понять, что наши варианты.
Установка
Чтобы начать, нам нужно установить 2 библиотеки: Флэк-сессия
и Redis
:
$ pip3 install flask-session redis
Конфигурация
Далее нам нужно настроить наше приложение. В нашем config.py Файл, нам нужно импортировать библиотеку Redis с Импорт Redis
(Мы доберемся до этого через минуту). Далее нам нужно установить следующие переменные в config.py :
- Secret_key : Flask-сеанс не будет работать без секретного ключа; Важно установить это в случайную строку символов (как всегда, убедитесь, что это безопасно).
- Session_type : Будет установлен на
Session_type = redis
для наших целей. - Session_redis : Ури из нашего облачного экземпляра Redis. Redis URI структурированы немного уникально:
Redis://: [пароль] @ [host_url]: [порт]
Отказ
Полная конфигурация экземпляра Redis с использованием URI выглядит так:
SESSION_REDIS = redis.from_url(environ.get('SESSION_REDIS'))
Если у вас возникли проблемы с конфигурацией, не стесняйтесь брать мону (это тянет значения из .env) :
"""App configuration.""" from os import environ import redis class Config: """Set Flask configuration vars from .env file.""" # General Config SECRET_KEY = environ.get('SECRET_KEY') FLASK_APP = environ.get('FLASK_APP') FLASK_ENV = environ.get('FLASK_ENV') # Flask-Session SESSION_TYPE = environ.get('SESSION_TYPE') SESSION_REDIS = redis.from_url(environ.get('SESSION_REDIS'))
Инициализация приложения для флэкса-сеанса
Мы уже много знаем о Флэк приложение завод И как инициализировать другие сквозные плагины, такие как Flask-SQLALCHEMY и FLOSK-LOGIN. Флэк-сеанс инициализируется таким же образом: мы сначала установим глобальную переменную, а затем инициализировать плагин с sess.init_app (приложение)
. Это пример __init__.py Инициализация файлов Flask-Session, Flask-SQLAlchemy и Flask-login (это сборки на исходном коде Мы использовали для реализации Flask-login ):
"""Initialize application.""" from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_login import LoginManager from flask_session import Session db = SQLAlchemy() login_manager = LoginManager() sess = Session() def create_app(): """Construct the core application.""" app = Flask( __name__ , instance_relative_config=False) # Application Configuration app.config.from_object('config.Config') # Initialize Plugins db.init_app(app) login_manager.init_app(app) sess.init_app(app) with app.app_context(): # Import parts of our application from . import routes from . import auth app.register_blueprint(routes.main_bp) app.register_blueprint(auth.auth_bp) # Create Database Models db.create_all() return app
С инициализированной Solad-сеансом, мы готовы посмотреть, как это работает!
Давайте связываться с некоторыми переменными
Прохладная вещь о Flask-сеансе заключается в том, что она простирает нативную колбу сессия
объект. После того, как мы настроили наше приложение Flask, чтобы использовать Flask-сеанс (как у нас уже есть), мы можем работать с переменными в колбе-сеансах таким же образом, как мы бы, если бы мы все еще использовали файлы cookie. Чтобы начать, мы просто импортируем сессия
от колбу
С этой строкой: от сеанса импорта колба
. Давайте рассмотрим основы управления значениями в сеансе колбы:
Установка значения
Установка переменной на сеансе очень похоже на значения настроек для любого старого объекта словаря Python:
session['key'] = 'value'
Извлечение значения
С помощью ценности, сохраненного на нашу сессию, мы можем получить и повторно использовать его с помощью .получить ()
:
session_var_value = session.get('key')
Удаление стоимости
Если значение, которое мы сохранили, использовались и больше не требуются, мы можем удалить переменные с нашего сеанса, используя оздоровительный ()
:
session.pop('key', None)
Демонстрируя сеансы
Чтобы увидеть сеансы, работающие в действии, мы собираемся создать пару маршрутов, которые создают и отображаемые значения, сохраненные на сеанс. Во-первых, мы установим переменную сеанса в маршруте домашней страницы нашего приложения. Затем мы создадим маршрут для конкретной цели отображения этой переменной:
"""Routes for logged-in application.""" from flask import Blueprint, render_template, session from flask_login import current_user from flask import current_app as app from .assets import compile_auth_assets from flask_login import login_required # Blueprint Configuration main_bp = Blueprint('main_bp', __name__ , template_folder='templates', static_folder='static') compile_auth_assets(app) @main_bp.route('/', methods=['GET']) @login_required def dashboard(): """Serve logged in Dashboard.""" session['redis_test'] = 'This is a session variable.' return render_template('dashboard.html', title='Flask-Session Tutorial.', template='dashboard-template', current_user=current_user, body="You are now logged in!") @main_bp.route('/session', methods=['GET']) @login_required def session_view(): """Route which displays session variable value.""" return render_template('session.html', title='Flask-Session Tutorial.', template='dashboard-template', session_variable=str(session['redis_test']))
На первый взгляд, это не похоже на что-то случилось на домашней странице нашего приложения:
Зарегистрированная домашняя страница нашего приложения для колб.
За кулисами мы установили переменную сеанса с именем redis_test
Отказ Когда мы ориентируемся на http://127.0.0.1:5000/session. , мы можем видеть это отображение:
Отображение значения переменной сеанса в колбе.
Мы не только создали значение, которое может упорствовать по всему взглядам, но поскольку мы сохранили это значение в экземпляре облака Redis, оно также должно сохраняться через устройства. Я подключил к моему экземпляру Redis, используя GUI, и это то, что вернулось:
Вид на то, что находится в нашем экземпляре Redis.
Ааа, ключи и значения, которые мы хранятся зашифрованы! Вот почему так важно установить наш секретный ключ раньше. Тем не менее, мы можем видеть, как наши переменные сеанса успешно отделены. Вместо того, чтобы в зависимости от браузера пользователя или локального сервера нашего приложения переменные сеансы пользователя приятные и удобные в облаке.
Возьми руки грязные
Лучший способ обучения делает, конечно. Для любого, кто заинтересован, я загрузил исходный код для этого руководства в Github здесь: https://github.com/hackersandslackers/flasksessionsession-Tutorial Отказ
Это был еще один эпизод приложений в области здания! Присоединяйтесь к нам в следующий раз, когда мы … Ну, я еще не уверен. Присоединяйтесь к нам в любом случае! Мирный
Оригинал: “https://dev.to/hackersandslackers/managing-session-data-with-flask-session-redis-360n”