2011-07-29 2 views
3

私はDjangoでカスタムデコレータを作成しようとしています。 ユーザーがそのページからログインしていない場合、ユーザーをカスタムログインページにリダイレクトしたいと考えています。 私はデコレータを書いて、それをデバッグしました。ユーザーがログインしていない状態でも正常に動作しますが、ログインした後にエラーが発生します。Djangoカスタムデコレータリダイレクトの問題

The view APPNAME.views.home didn't return an HttpResponse object. 

私のコードは以下のとおりです。個人的なアルファページの認証後に私のデコレータが単にreturn wraps(func)(inner_decorator)セクションにジャンプするのはなぜですか?あなたが実際にビューを呼び出していないので、あなたが応答

return render_to_response('homepage.html', context_instance=RequestContext(request)) 

または応答にレンダリングにレンダリングするためのコンテキストを渡す必要がある

おかげ

def private_alfa_required():  
def decorator(func): 
    def inner_decorator(request,*args, **kwargs): 
     if 'isPrivateAlfaUser' not in request.session or request.session['isPrivateAlfaUser'] != True: 
      return render_to_response('homepage.html') 

    return wraps(func)(inner_decorator) 

return decorator 

@private_alfa_required() 
def home(request): 
..... 



def home2(request): 
    ..... 

答えて

4

を動作しません。あなたのテストが成功すれば、機能します。

​​

2次的な注意として、デコレータは引数を取らないため、外側のラッパーは必要ありません。それを落とす場合は、()をデコレータ自体にドロップする必要もあります。

+0

私はこのように書いていますが、今度は「APPNAME.main.views」モジュールで試したことがあります。エラー: 'APPNAME.main.views.home'は呼び出し可能ではありません。 '実際に私はデコレータの背後にあるロジックを理解していませんでした。どこに良い文書がありますか? – brsbilgic

+0

あなたの 'views.py'におそらくどこかにエラーがあります。 'home'関数の内容全体を投稿すると、何が問題か分かります。 –

0

+0

申し訳ありませんが、どちらも動作しませんでした – brsbilgic