@login_required 데코레이터를 설정해 둔 경우, 실패한 경우 어떤 페이지가 뜨기는 하는데 내가 따로 설정한 적이 없는 것 같은데, 어디서 설정해 주나?
알아보다 보니 settings.py 에 설정 되어 있어서 코드에서 볼 수 없었다.
settings.py 에 보면 "LOGIN_URL" 이라는 값을 설정해 둔 곳이 있다.
# settings.py
...
LOGIN_URL = '/login/'
...
@login_required 데코레이터가 실패시 여기 설정된 페이지로 자동으로 이동 시켜 주도록 장고가 설정 되어 있다는 것.
이게 싫은 경우에는 어떻게 해야 하나?
별도의 데코레이터 함수를 따로 작성하면 되는 것은 당연한데 더 편하게 해 주는 것은 없을까?
추후 업데이트 할련다.
로그인 실패 페이지 바로 설정하기
(업데이트) 바로 login_required 에 실패시 이동 페이지 정보를 바로 주면 된다.
@api_router.get("error", response={403: Message})
def user_error(request):
msg = "Forbidden"
return {"msg": msg}
@api_router.get("company/{companyid}", response=CompanySchema)
@login_required(login_url='/api/error')
def get_company_id(request, companyid: int):
...
위의 코드에서 @login_required(login_url=원하는이동페이지주소) 이렇게 주면 된다.
나는 api 호출의 경우에 사용할 것이므로 간단하게 Error code 만 리턴하는 페이지를 위에 만들어서 그쪽으로 보내도록 해 두었다.
원하는 대로 되어서 다행이긴 하다......불안한 건 왜지?

장고 공식 페이지 있으니 걱정 덜어
Using the Django authentication system | Django documentation | Django
Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate
docs.djangoproject.com
login_required() also takes an optional login_url parameter. Example:
from django.contrib.auth.decorators import login_required
@login_required(login_url='/accounts/login/')
def my_view(request):
...
Note that if you don’t specify the login_url parameter, you’ll need to ensure that the settings.LOGIN_URL and your login view are properly associated. For example, using the defaults, add the following lines to your URLconf:
Rene Asmussen 님의 사진, 출처: Pexels