чтение переменной вне функции - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь прочитать файл в памяти следующим образом:

sttr=request.FILES['file_field'].read()

Теперь я хочу, чтобы sttr запускался, если сайт не закрыт или в течение определенного времени.Я не могу сделать его глобальным, потому что он возникает в ситуации взлома данных. Я не хочу хранить его в базе данных, просто прочитайте его, сохраните в переменной и передайте эту переменную другой функции в views.py, и я могуне использую сеансы, потому что у меня нет конкретных key для session[key].Есть ли другой способ извлечь данные из файла памяти из другого файла views.py, например,

def mainpage(request):
     sttr=request.FILES['file_field'].read()

def hh(request):
     print(sttr)

, не делая sttr глобальным?

1 Ответ

1 голос
/ 11 марта 2019

Чтобы разделить некоторые данные между запросами, вы должны хранить их где-то и иметь возможность извлекать их тем или иным способом.Вы не можете действительно использовать глобальные значения для этого (по крайней мере, в приложении wsgi), поскольку один процесс wsgi обслуживает более одного пользователя (поэтому данные user2 перезаписывают данные user1), и у вас обычно есть как минимум полдюжины серверных процессов.(и я говорю о настройке одного сервера здесь), чтобы любой из них мог обслуживать «следующий» запрос данного пользователя, чтобы вы в конечном итоге установили глобальный в одном процессе и попытались прочитать его в другом - что, очевидно,не может работать, поскольку переменные относятся к каждому процессу.

Вот почему кто-то изобрел файлы cookie и сеанс, чтобы разделять более или менее изменчивые данные между запросами.

Если размер вашего файла небольшой (я имею в виду small - максимум пару килобайт, а желательно меньше), вы можете просто сохранить его содержимое в сеансе - ваше упоминание о "Я могуНе используйте сеансы, потому что у меня нет специального ключа для сеанса [ключ] "- это совершенно бессмысленно, объект Django request.session похож на диктовку, и вы можете установить любой ключ, какой захотите, иначе он будет совершенно бесполезен.

Если это что-то большее, вы бы предпочли записать содержимое файла в известное место в файловой системе и вместо этого сохранить путь в сеансе (сеансы загружаются в память, вы не хотите, чтобы вашоперативная память сервера с гигабайтами пользовательского содержимого).

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