2016-06-29 8 views
-1

질문이 매우 분명하지만 장고를 처음 사용하는 경우 유감입니다. 내가 페이지를 게시물로 이동하는 경우Django 로그인 필요 문제

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',) 

로그인이 제대로 리디렉션하지만 POST에 도착하면 로그인이 필요하지 않습니다 ADD :

내가보기있다.

로그인을 올바르게 사용해야합니까?

답변

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' 

그것을 조금 단순화하기 위해 more를 사용하면 mixin을 TemplateView로부터 상속 받아 모든 로그인에 필요한보기를위한 단일 기본 클래스로 사용할 수 있습니다.

또한 두 가지 방법 중 하나를 사용하여 설정에서 로그인 URL을 검색하는 것이 좋습니다.