로그인 안 한 사용자가 특정 페이지에 접근 못하도록 하기

조회수 2488회

소스코드 url(r'codeedit$', views.index, name='index') 실행하기 ▶ 예를 들어 www.mysite.com/codedit로 가려면 다음과 같은 url 코드가 있어어야 합니다. 하지만 로그인했을 때에만 다음과 같은 url로 이동이 가능하려고 하려면 어떻게 해야할까요?

제가 찾아보았는데 장고 docs에 나와있기로는

소스코드 django.contrib.auth.views.login 실행하기 ▶ 다음과 같은 코드를

소스코드 url(r'$', django.contrib.auth.views.login), 실행하기 ▶ 와 같이 사용하면 가능하다고 하는데 이렇게 써버리면 views.index를 호출을 못합니다.. 혹시 한줄에 다 같이 쓸수있는건가요??

  • 누가 올리셨는데... 답변다는중에 질문이 지워졌네요 답변이 아까워서 그냥 제가 등록합니다. 정토드 2016.2.26 15:52

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    1) 일단 사용자가 로그인하지 않았다면 www.mysite.com/codeedit 으로 가는 링크를 표시하지 않아야겠져. 이 부분은 www.mysite.com 이 연결된 views와 템플릿에서 처리하면 될것 같구요.

    2) 그래도 사용자가 www.mysite.com/codeedit 을 치고 바로 들어올수도 있져? 그럴때는 index에서

    def index(request):
        if not request.user.is_authenticated():
                return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
    

    이렇게 할 수도 있구요. 아니면 redirect대신 에러메시지를 보여줘도 됩니다.

    다른 방법으로는

    @login_required
    def index(request):
        #뭔가 하기
    

    이렇게 하면 자동으로 로그인 안된경우 settings.LOGIN_URL로 redirect합니다.

    두 방법 다 미리 settings.LOGIN_URL를 설정해 두셔야 하구요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)