웹사이트에 로그인 해야만 실행 될 메소드를 작성하고 싶다. 어떻게 해야할까?
장고 공식문서에는 여러 가지 방법을 소개해준다
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 메소드를 활용하는 방법이다.
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
사진 참고).
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
데코레이터를 사용하면: