Рубрики
Без рубрики

Управление данными сеанса с Flask-Session & Redis

При строительстве мы создаем приложения, которые обрабатывают пользователей, много функциональности зависит от хранения … Помечено с колбой, Python, SoftWaredEvelopepelomment, NoSQL.

При строительстве мы строим приложения, которые обрабатывают пользователям, многие функциональные возможности зависит от хранения переменных сеансов для пользователей. Рассмотрим типичную 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”