0
我试图在Django视图之间共享一些数据。我有一种观点,让我在“Mwfrs建筑”这个课堂上进行实习。该类有几个属性,属性和cached_property。将类实例中的数据存储到request.session
例如:
from django.utils.functional import cached_property
class MwfrsBuildings:
def __init__(self, form_cleaned_data):
for key, value in form_cleaned_data.items():
setattr(self, key, value)
@property
def foo(self):
pass
@cached_property
def bar(self):
pass
我需要从属性和属性数据。我有以下观点:
def buildings(request):
if request.POST and request.is_ajax():
s_form = BuildingForm(request.POST)
if s_form.is_valid():
method = MwfrsBuildings(s_form.cleaned_data)
html = render_to_string('wind/results/buildings/buildings_results.html',
{'method': method})
request.session['building_method'] = method.__dict__
return JsonResponse({"result": html})
else:
return JsonResponse({'building_errors': s_form.errors},
status=400)
因为我不能存储实例化的类,我存储使用__dict__
方法的数据。这适用于类属性和cached_property,但不适用于属性。
如何将类属性存储在request.session
?
可以通过instanciated类request.session
?
-------------------- UPDATE ------------------------
我不知道这是不是一个好习惯,但我想通过使用Pickle。例如:
import pickle
def buildings(request):
if request.POST and request.is_ajax():
s_form = BuildingForm(request.POST)
if s_form.is_valid():
method = MwfrsBuildings(s_form.cleaned_data)
html = render_to_string('wind/results/buildings/buildings_results.html',
{'method': method})
with open("building.pickle", "wb") as outfile:
pickle.dump(method, outfile)
return JsonResponse({"result": html})
else:
return JsonResponse({'building_errors': s_form.errors},
status=400)
然后在其他视图:
def buildings(request):
# some code
with open("building.pickle", 'rb') as outfile:
method = pickle.load(outfile)
# Then use the instanciated class
__
如果我是你,我会写一个serialiser来保存你的对象到一个字典,而不是'__dict__'。或者你可以重载你的类的'__dict__'方法,但是通常你会从'__dict__'获得更多的内容。这样,您可以节省您的所需。 – dirkgroten
你能告诉我一个例子吗?还是参考? – Eduardo