본문 바로가기
 

하나성경

읽기 쉬운 성경, 하나성경을 소개합니다.

www.hbible.co.kr

컴퓨터에서는

[ Django ] 로그인한 사용자만 접근 가능한 사이트 만들기

by 컴 여행자 2025. 5. 22.
728x90
반응형

 

장고
장고

 

 

 

로그인한 사용자만 접근 가능한 사이트 만들기를 해 보았습니다.

 

개발환경은 장고 1.10.3, 파이썬 2.7.5입니다.

 

Django 1.10.3에서 전체 사이트가 로그인한 사용자만 접근 가능하도록 설정하려면, 가장 효과적이고 일괄적인 방법은 미들웨어를 이용하는 방법입니다. 이를 통해 로그인하지 않은 사용자는 항상 로그인 페이지로 리다이렉트되도록 만들 수 있습니다.


✅ 1. 사용자 정의 미들웨어 만들기

 

먼저, 모든 요청에 대해 로그인 여부를 체크하는 미들웨어를 생성합니다.

 

미들웨어가 위치할 곳은 settings.py 파일이 있는 곳입니다.

이 디렉토리에서 middleware 디렉토리를 생성합니다.

그리고 middleware 디렉토리로 이동한 후에 필수 파일인 __init__.py를 생성합니다. 이 파일은 빈 파일이지만 꼭 있어야 하는 필수 파일입니다.

그리고 실제 로그인을 처리할 코드가 들어갈 login.py를 생성합니다.

 

예: login.py

/home/user_dir/html/my_site/
└── config/                 <-- 여기에 settings.py가 있다면
    ├── settings.py
    ├── urls.py
    ├── wsgi.py
    └── middleware/         <-- 여기에 login.py를 생성해야 합니다
        ├── __init__.py     <-- (필수)
        └── login.py        <-- LoginRequiredMiddleware 정의

 

 

login.py 파일에 다음과 같이 작성하세요.

from django.conf import settings
from django.shortcuts import redirect
from django.core.urlresolvers import reverse
import re

EXEMPT_URLS = [re.compile(settings.LOGIN_URL.lstrip('/'))]
if hasattr(settings, 'LOGIN_EXEMPT_URLS'):
    EXEMPT_URLS += [re.compile(expr) for expr in settings.LOGIN_EXEMPT_URLS]

class LoginRequiredMiddleware(object):
    def __init__(self, get_response=None):
        self.get_response = get_response

    def __call__(self, request):
        path = request.path_info.lstrip('/')

        if not request.user.is_authenticated():
            if not any(m.match(path) for m in EXEMPT_URLS):
                return redirect(settings.LOGIN_URL)

        response = self.get_response(request)
        return response

 

✅ 2. settings.py 설정 추가

로그인 URL 지정:

LOGIN_URL = '/user/login/'

 

로그인 예외 URL 등록 (로그인 페이지 자체 등):

LOGIN_EXEMPT_URLS = (
    r'^user/login/$',
    r'^admin/login/$',  # 관리 사이트 로그인
    r'^admin/',         # 전체 admin 경로
    r'^static/',        # 정적 파일 (필요 시)
    r'^media/',         # 미디어 파일 (필요 시)
)

 

미들웨어 등록 (Django 1.10 방식):

 

MIDDLEWARE 또는 MIDDLEWARE_CLASSES 항목에 등록합니다.

MIDDLEWARE_CLASSES = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # 여기에 추가
    'config.middleware.login.LoginRequiredMiddleware',
]

❗ 경로에서 config.middleware.login 부분은 실제 파일 위치에 맞게 수정해야 합니다.


✅ 3. 확인 및 테스트

서버를 재시작한 뒤, 로그인하지 않은 상태에서 https://mysite.co.kr/ 등 다른 페이지로 접근해 보세요. 로그인 페이지(/user/login/)로 리디렉트되면 설정이 성공한 것입니다.


✅ 추가 팁

  • 정적 파일(static, media) 도 보호될 수 있으므로, LOGIN_EXEMPT_URLS에 포함하거나 웹 서버(Apache 등)에서 직접 처리하는 것이 좋습니다.
  • API가 있다면 해당 URL도 예외 처리해야 할 수 있습니다.

 

https://www.djangoproject.com/

 

Django

The web framework for perfectionists with deadlines.

www.djangoproject.com

 

 

728x90
반응형

댓글