我有一个基于类的视图,从get和post请求中我一直在调用一个方法,以从HttpResponseRedirect kwargs中的信息获取信息。
代码:
class View1(View):
def get(self, request, *args, **kwargs):
... stuff ...
return render(request, self.template_name, self.context)
def post(self, request, *args, **kwargs):
... stuff ...
return HttpResponseRedirect(
reverse('results:report_experiment',
kwargs={
'sample_id': current_sample_id
}
))
class View2(CustomView):
def obtainInformation(self, kwargs):
sample_id = kwargs.get('sample_id', None)
self.sample_obj = Sample.objects.get(id=sample_id)
def dispatch(self, request, *args, **kwargs):
self.obtainInformation(kwargs)
return super(View2, self).dispatch(request, *args, **kwargs)
def get(self, request, *args, **kwargs):
... stuff ...
return render(request, self.template_name, self.context)
def post(self, request, *args, **kwargs):
... stuff ...
return HttpResponseRedirect(
reverse('results:report_experiment',
kwargs={
'sample_id': current_sample_id
}
))
我的问题是,当我在dispatch方法中调用self.obtainInformation(kwargs)时,我可以访问在get和post方法中定义的任何类变量。以前,我在view2的get和post方法中都调用了self.obtainInformation(kwargs)(因此两次调用了该方法)。
这是使用调度方法的明智方法吗?
答案 0 :(得分:1)
是的,在您执行操作时覆盖dispatch()
看起来不错,并且可以避免重复调用obtainInformation
和get()
中的post()
。
在Django 2.2(目前正在开发中)中,有一种新的setup()
方法可供您使用。
class View2(CustomView):
def setup(self, request, *args, **kwargs):
super().setup(request, *args, **kwargs)
self.obtainInformation(kwargs)