从基于类的通用视图中获取request.session

bca*_*tle 33 django django-views

有没有办法request.session从基于类的视图中获取?

例如,我有

from django.views.generic.edit import FormView

class CreateProfileView(FormView):
    def form_valid(self, form):
        # --> would like to save form contents to session here

        return redirect(self.get_success_url())
Run Code Online (Sandbox Code Playgroud)

我唯一能想到的就是as_view通过添加覆盖

def as_view(self, request, *args, **kwargs):
    self.session = request.session
    super(CreateProfileView, self).as_view(request, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

上课.但这看起来很难看.还有另外一种方法吗?

Tim*_*ony 57

您可以self.request从班级内的任何地方访问(因此self.request.session)

https://docs.djangoproject.com/en/dev/topics/class-based-views/generic-display/#dynamic-filtering

使这项工作的关键部分是,当调用基于类的视图时,各种有用的东西都存储在自己身上; 以及请求(self.request),这包括根据URLconf捕获的位置(self.args)和基于名称(self.kwargs)的参数.

  • 这里的重要部分是"基于类的视图*被称为*"; 也就是说,它需要在类的*方法之一*(例如,def get_context_data(self,**kwargs))内完成,而不是在类中但在任何方法之外. (8认同)