2012-03-27 13 views
23

Czy istnieje sposób na uzyskanie request.session z widoku opartego na klasach?Uzyskaj request.session z ogólnego widoku klasowego

Na przykład, mam

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()) 

Jedyne co mogę myśleć byłoby zastąpić as_view dodając

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

do klasy. Ale to wydaje się brzydkie. Czy istnieje inny sposób?

Odpowiedz

44

Masz dostęp do self.request z dowolnego miejsca w klasie (a więc self.request.session)

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

Kluczowym elementem do podejmowania tej pracy jest to, że gdy poglądy klasy oparte są nazywane, różne przydatne rzeczy są przechowywane na sobie; jak również żądanie (self.request) obejmuje to argumenty pozycyjne (self.args) i oparte na nazwach (self.kwargs) przechwycone zgodnie z URLconf.

+6

Ważną częścią tutaj jest "kiedy widoki oparte na klasach * nazywają się *"; tj. musi być wykonana w ramach jednej z metod * klasy * (np. def get_context_data (self, ** kwargs)), nie wewnątrz klasy, ale poza dowolnymi metodami. – Chirael

Powiązane problemy