Получить request.session из общего представления на основе классов - PullRequest
31 голосов
/ 28 марта 2012

Есть ли способ получить 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())

Единственное, о чем я могу думать, это переопределить as_view, добавив

def as_view(self, request, *args, **kwargs):
    self.session = request.session
    super(CreateProfileView, self).as_view(request, *args, **kwargs)

к классу.Но это кажется уродливым.Есть ли другой способ?

1 Ответ

54 голосов
/ 28 марта 2012

У вас есть доступ к self.request из любого места в классе (и, следовательно, self.request.session)

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

Ключевой частью этой работы является то, что при вызове представлений на основе классов различные полезные вещи хранятся в самом себе; а также запрос (self.request) включает позиционные (self.args) и основанные на имени (self.kwargs) аргументы, захваченные в соответствии с URLconf.

...