использовать Django request.session внутри служебной функции - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь вызвать request.session.get('items', {}) из пользовательской функции util util.py .

, но в этом файле объект request недоступен, ямогу передать объект запроса из views.py, но я не хочу.Есть ли способ использовать объект запроса внутри пользовательских функций (не просмотр / шаблон).

Я пытался импортировать из django.http import HttpRequest, но в этом классе нет ни одной переменной сеанса.Django начинающий, любая помощь приветствуется.

util.py :

def processData(data=None):
   ## get items form  session
   items = request.session.get('items', {})  ## error name 'request' is not defined
   # append with data
   items.update(data)
   return items 

Ответы [ 2 ]

1 голос
/ 29 сентября 2019

Вы должны пройти его.Другой опции нет.

request - это не общая переменная, которую вы можете просто импортировать из другого места.Скорее, это набор информации, ОСОБЕННОЙ для конкретного запроса, который только что был сделан.Он содержит такие вещи, как файлы cookie и текущий URL.

Он генерируется всякий раз, когда кто-то делает запрос через сервер на него, поэтому вы видите его в качестве аргумента для своих функций просмотра.

Полагаю, вы могли бы превратить это в какую-то глобальную переменную, но это абсурдный путь.

0 голосов
/ 29 сентября 2019

Существует опция, позволяющая вам сделать это с помощью этого пакета: django-threadlocals .Вы должны взглянуть на их код, чтобы увидеть, как он работает.

Примерно так:

from threadlocals.threadlocals import get_current_session

def processData(data=None):
    session = get_current_session()
    # Do your stuff here

Если вы выберете этот способ, убедитесь, что вы понимаете, что делает django-threadlocals.Это было создано потому, что если мы хотим использовать некоторые данные для объекта запроса на очень глубоком уровне, то мы не должны передавать объект запроса через каждый отдельный слой.

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

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...