Как я могу разделить dict между двумя разными http-запросами

Приложение Django загружает данные из файла в словарь Python, обрабатывает их и отправляет в виде http-ответа. Теперь скажем, что на веб-сервер получено n запросов, тогда это приложение Django будет запускаться n раз и загружать данные из файла в диктофон Python n раза. Мне было интересно, могу ли я каким-то образом сделать так, чтобы эти данные загружались в dict только один раз, в то время как n http-ответ мог быть обслужен.

Пример файла view.py для проблемной ситуации может быть следующим:

from django.http import HttpResponse
from django.http import HttpRequest

def hello(request):
    data = open("abc").readlines()
    return HttpResponse(data[0])

person codersofthedark    schedule 17.08.2012    source источник


Ответы (3)


Это задание для Django Middleware. Добавьте его в свои настройки, и он будет сохраняться в вашем запросе. Это лучший вариант, чем постоянство, и определенно намного лучше, чем использование глобального объекта.

Промежуточное ПО — это фреймворк для обработки запросов и ответов Django. Это легкая низкоуровневая система «плагинов» для глобального изменения ввода и/или вывода Django. Каждый компонент промежуточного программного обеспечения отвечает за выполнение определенной функции. Например, Django включает промежуточный компонент XViewMiddleware, который добавляет HTTP-заголовок X-View к каждому ответу на запрос HEAD.

person Pratik Mandrekar    schedule 17.08.2012

Привязка словаря к глобальному имени заставит его сохраняться до тех пор, пока работает проект Django. Обратите внимание, что каждый процесс Django (некоторые контейнеры WSGI, например mod_wsgi, могут запускать несколько процессов для приложения) будет иметь свою собственную независимую копию словаря.

person Ignacio Vazquez-Abrams    schedule 17.08.2012
comment
@Torsten: конечно это не так. Но это связано с характером вопроса. - person Ignacio Vazquez-Abrams; 17.08.2012
comment
Мне нравится ваше отношение, но разве мы не должны предложить пользователям использовать лучшие практики? :D - person Torsten Engelbrecht; 17.08.2012
comment
@Torsten: Я не вижу, чтобы ты спрашивал его, почему он вообще этого хочет. - person Ignacio Vazquez-Abrams; 17.08.2012

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

person Timmy O'Mahony    schedule 17.08.2012
comment
Данные не имеют отношения к пользователю, но диапазон ips из запроса был сгенерирован. - person codersofthedark; 17.08.2012