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

Приложението Django зарежда данни от файл в Python dict, обработва ги и ги изпраща като http отговор. Сега кажете, че n брой заявки са получени на уеб сървъра, тогава това приложение на Django ще се изпълни n пъти и ще зареди данни от файл в Python dict 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. Добавете го към настройките си и той ще остане във вашата заявка. Това е по-добър вариант от постоянството и определено много по-добър от използването на глобален обект.

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
Харесва ми вашето отношение, но не трябва ли да предложим на потребителите да използват по-добри практики? :Д - 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