Django @login_required 데코레이터

Tae Woo Kim·2024년 8월 26일
0

Python

목록 보기
7/7

개요

웹사이트에 로그인 해야만 실행 될 메소드를 작성하고 싶다. 어떻게 해야할까?

본문

장고 공식문서에는 여러 가지 방법을 소개해준다

1. 직접 로그인 체크하기

from django.conf import settings
from django.shortcuts import redirect


def my_view(request):
    if not request.user.is_authenticated:
        return redirect(f"{settings.LOGIN_URL}?next={request.path}")
    # ...

로그인 시 request에 저장되는 user의 is_authenticated 메소드를 활용하는 방법이다.

2. login_required 데코레이터 사용

from django.contrib.auth.decorators import login_required


@login_required
def my_view(request): ...

로그인이 안되어있으면 settings.py에 저장되있는 LOGIN_URL로 리다이렉트 된다 (사진 참고).

@login_required는 login_url 파라미터를 받을 수 있으며, settings.LOGIN_URL이 작성되어있으면 login_url 파라미터를 안넣어도 된다.

또, URL 파라미터에 next="원래 있었던 url의 절대경로"가 저장된다 (next=/items/list 사진 참고).

그래서 원래 있었던 url의 경로를 활용할 수 있다.

연관된 데코레이터 (staff_member_required)

연관된 데코레이터로는 staff_member_required가 있다.
권한이 필요한 관리자 뷰에 쓰인다. 자세한 것은 문서를 봐보자!
https://docs.djangoproject.com/en/5.1/ref/contrib/admin/#django.contrib.admin.views.decorators.staff_member_required

마치며

@login_required 데코레이터를 사용하면:

  • 로그인을 해야만 해당 메소드가 실행된다
  • settings.LOGIN_URL로 리다이렉션 시킨다 (커스텀 가능).
  • 원래 있었던 URL의 절대 경로가 URL 파라미터에 저장된다 (next)

0개의 댓글