하얀설표 블로그




장고)append slash는 상태코드 404를 반환한다





( 수정됨)


django는 logging을 통한 로그 생성을 위해 settings.py에서 logger 관리가 가능하다.

이를 이용해 문제가 발생한 페이지 접근 내역을 기록하고 있는데, append slash 옵션을 통해 리다이렉트되는 페이지들이 계속 상태코드 404를 반환한다는 기록이 쌓였다.
아이러니한 것은, 실제로 접속해보면 301 또는 302 리다이렉트 코드를 반환한다는 것이다. 즉, 장고에서 내부적으로만 상태코드 404를 반환하고 있다는 뜻이었다.

의도적인 설계?

이와 관련된 내용을 검색해보면 djangoproject.com에서 비슷한 내용을 질문한 기록을 볼 수 있고, 이것은 의도적으로 설계된 것이라는 답변을 확인할 수 있다.

링크

append slash middleware

일단 append slash 옵션을 사용하는 미들웨어는 CommonMiddleware인 것을 확인했다.
그러나 여기서는 should_append_slash의 값을 True로 선언하는데, 이 옵션을 어디서 사용하는지는 알아내지 못했다.

class CommonMiddleware(MiddlewareMixin):
    ...
    def should_redirect_with_slash(self, request):
        """
        Return True if settings.APPEND_SLASH is True and appending a slash to
        the request path turns an invalid path into a valid one.
        """
        if settings.APPEND_SLASH and not request.path_info.endswith("/"):
            urlconf = getattr(request, "urlconf", None)
            if not is_valid_path(request.path_info, urlconf):
                match = is_valid_path("%s/" % request.path_info, urlconf)
                if match:
                    view = match.func
                    return getattr(view, "should_append_slash", True)
        return False

코드 출처 : https://github.com/django/django/blob/main/django/middleware/common.py


공감 : 0







white.seolpyo.com