2016-06-29 8 views
-1

質問が非常にはっきりしていても残念ですが、私はまだDjangoを初めて使っています。Djangoログインに必要な問題

私はビューがあります。私はページをPOSTするために行くが、私は、ログインを追加POSTになった場合に必要とされていない場合にはログインが正しくリダイレ​​クト

import logging 

@login_required(login_url='/accounts/login/') 

def index(request): 
     return render(request, 'post.html', {}) 

def new(request): 
    return render(request, 'post-add.html',) 

私はログインが正しく必要ですか?

答えて

0

あなたはすべてに@login_requiredデコレータを適用する必要がありますあなたのためにログインを必要とするビュー:あなたは、ログインせずに「ポスト・アドオン」を開こうとするとリダイレクトしたい場合は、あなたが(別のデコレータが必要

@login_required(login_url='/accounts/login/') 
def index(request): 
     return render(request, 'post.html', {}) 


@login_required(login_url='/accounts/login/') 
def new(request): 
    return render(request, 'post-add.html', {}) 
+1

すべてのビューでログインURLを文字列として指定することはお勧めできません。特にデフォルトのdjango設定になっている場合は、 – Sayse

1

@login_required(login_url = '/ accounts/login /') )。

+0

ありがとうございます。すべてのページが自動的にログインする必要がありますか?どこにでもデコレータを追加する必要はありませんか? – user43506

+0

いいえ、私はそうは思わない。しかし、設定ファイルにデフォルトのlogin_urlを設定することができます。デコレータ(@login_required)を追加することができます。それは非常に簡単に見えます。 – Lincoln

0

他にも、認証が必要なすべてのビューでログインデコレータを使用する必要があることが指摘されている人もいます。

あなたは、単にこのようにそれをラップすることにより、それを再使用することができます。

auth = login_required(login_url='/accounts/login/') 

@auth 
def index(request): 
    return render(request, 'post.html', {}) 

@auth 
def new(request): 
    return render(request, 'post-add.html',) 

をそれとも、クラスベースのビューを好きなら、私は好むこの:

class AuthMixin(object): 
    @method_decorator(login_required(login_url='/accounts/login/')) 
    def dispatch(self, *args, **kwargs): 
     return super(AuthMixin, self).dispatch(*args, **kwargs) 

class IndexView(AuthMixin, TemplateView): 
    template_name = 'post.html' 

class AddView(AuthMixin, TemplateView): 
    template_name = 'post-add.html' 

はそれを少し簡単にするために、 mixinをTemplateViewから継承させ、すべてのログインに必要なビューに対して単一の基本クラスとして使用することができます。

どちらの方法でも、設定からログインURLを取得することをお勧めします。

関連する問題