Django视图:这是使用基于Django类的视图的调度方法的正确方法吗?

时间:2019-01-03 11:02:34

标签: django django-views

我有一个基于类的视图,从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)(因此两次调用了该方法)。

这是使用调度方法的明智方法吗?

1 个答案:

答案 0 :(得分:1)

是的,在您执行操作时覆盖dispatch()看起来不错,并且可以避免重复调用obtainInformationget()中的post()

在Django 2.2(目前正在开发中)中,有一种新的setup()方法可供您使用。

class View2(CustomView):

    def setup(self, request, *args, **kwargs):
        super().setup(request, *args, **kwargs)
        self.obtainInformation(kwargs)