2012-03-27 4 views
23

request.sessionをクラスベースのビューから取得する方法はありますか?例えばクラスベースの一般ビューからrequest.sessionを取得

、私は私は考えることができる唯一のことは、クラスに

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

を追加することでオーバーライドas_viewだろう

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

を持っています。しかし、それは醜いようです。別の方法がありますか?

答えて

44

、種々の有用なものをあなたはどこにでもクラス内から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)の引数が含まれます。

+6

重要な部分は、「クラスベースのビューが*呼び出されたとき*」です。つまり、クラスの*メソッド*(たとえば、get get_context_data(self、** kwargs))の1つの中で、クラス内ではなくメソッドの外で行う必要があります。 – Chirael

関連する問題