Почему не нужно создавать экземпляр объекта сеанса колбы? - PullRequest
0 голосов
/ 11 июня 2018

Читая документацию я понимаю, что flask определяет класс flask.session.

Меня смущает то, что, когда люди используют его, они не создают объект класса сеанса, а используют сеанс напрямую, как в следующем коде:

from flask import Flask, session

app = Flask(__name__)

@app.route('/')
def index():
    session['key'] = 'value'

IЯ не понимаю, почему код не должен выглядеть примерно так:

from flask import Flask, session

app = Flask(__name__)
s = session() # so s is an instance of the flask.session class

@app.route('/')
def index():
    s['key'] = 'value'

Мне также интересно, имеет ли это какое-то отношение к тому, что сессия является прокси, как сказано в документации.Я прочитал «Заметки о прокси», но ничего не понял.

1 Ответ

0 голосов
/ 11 июня 2018

Удивительный вопрос.

Инициализируется в колбах globals.py

https://github.com/pallets/flask/blob/master/flask/globals.py

session = LocalProxy(partial(_lookup_req_object, 'session'))

Поэтому при импорте из колбы вы импортируете из ее упаковки __init__.py, который извлекает сессию из globals.py и инициализирует ее.Вы получаете ссылку на это, когда непосредственно импортируете его.

Я должен уточнить, что сам сеанс не является классом.Это экземпляр класса LocalProxy, который является прокси для контекста запроса.

...