[장고] 사용자 접속 환경 확인 - 모바일 디바이스 식별하기

소요 시간: 3분

현대 웹 개발에서 중요한 과제 중 하나는 다양한 디바이스에서 원활하게 작동하는 웹사이트를 구축하는 것입니다. 사용자가 어떤 디바이스로 웹사이트에 접근하는지 식별하는 것은 특히 중요합니다. 이를 통해 사용자 경험을 최적화하고, 맞춤형 콘텐츠를 제공할 수 있습니다. 이 글에서는 장고 미들웨어를 이용해 사용자가 어떤 디바이스로 페이지를 요청했는지 감지하는 방법을 알아보겠습니다.


프로젝트 설정

먼저, 프로젝트 폴더(예: manage.py 파일이 있는 곳)에 mobileesp라는 이름으로 새 폴더를 만듭니다. 이 폴더 안에 __init__.py, mdetect.py, middleware.py 세 파일을 생성합니다.

init.py

__init__.py 파일은 해당 디렉터리가 파이썬 패키지임을 알려줍니다. 이 파일이 있어야 다른 파이썬 파일에서 코드를 import할 수 있습니다.

mdetect.py

mdetect.py 파일에는 디바이스를 감지하는 소스 코드를 작성합니다. 자세한 소스 코드는 MobileESP: Ported to Python!을 참고하세요.

middleware.py

이제 미들웨어 파일을 설정해보겠습니다. middleware.py 파일을 열고 다음 코드를 입력합니다.

from mobileesp import mdetect

class MobileDetectionMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        is_mobile = False
        is_tablet = False
        is_phone = False
        
        user_agent = request.META.get("HTTP_USER_AGENT")
        http_accept = request.META.get("HTTP_ACCEPT")
        if user_agent and http_accept:
            agent = mdetect.UAgentInfo(userAgent=user_agent, httpAccept=http_accept)
            is_tablet = agent.detectTierTablet()
            is_phone = agent.detectTierIphone()
            is_mobile = is_tablet or is_phone or agent.detectMobileQuick()

        request.is_mobile = is_mobile
        request.is_tablet = is_tablet
        request.is_phone = is_phone
        
        # Code to be executed for each request before
        # the view (and later middleware) are called.
        
        response = self.get_response(request)

        # Code to be executed for each request/response after
        # the view is called.

        return response

이 미들웨어는 사용자의 HTTP_USER_AGENT와 HTTP_ACCEPT 정보를 기반으로 디바이스를 식별합니다. 식별된 정보는 request.is_mobile, request.is_tablet, request.is_phone 속성에 저장됩니다.


설정 파일에 미들웨어 추가하기

생성한 미들웨어를 장고 설정 파일에 추가해야 합니다. settings.py 파일을 열어 MIDDLEWARE 리스트에 다음 줄을 추가합니다.

MIDDLEWARE = [
    # ... 생략 ...
    'mobileesp.middleware.MobileDetectionMiddleware',
]

이제, 설정한 미들웨어를 통해 요청을 처리할 수 있게 됩니다.


뷰에서 디바이스 정보 사용하기

이제 디바이스 정보를 감지할 준비가 완료되었습니다. 감지하고 싶은 뷰에서 request.is_mobile, request.is_tablet, request.is_phone 속성을 사용하면 됩니다. 예를 들어, 다음과 같이 사용할 수 있습니다.

def my_view(request):
    if request.is_mobile:
        # 모바일 디바이스에 대한 처리
        pass
    if request.is_tablet:
        # 태블릿에 대한 처리
        pass
    if request.is_phone:
        # 휴대폰에 대한 처리
        pass
    return render(request, 'my_template.html')


테스트 및 디바이스 세분화

모바일 디바이스 식별 기능이 잘 작동하는지 확인하려면 실제 모바일 디바이스로 테스트 서버에 접근해 보세요. 또한, iOS, Android 등 다양한 플랫폼에 대한 세부적인 감지도 가능합니다. mdetect.py 파일의 다양한 메서드를 활용해보세요. 예를 들어, detectIphoneOrIpod, detectAndroidPhone, detectWindowsPhone 메서드를 사용할 수 있습니다. 자세한 내용은 MobileESP Python 코드에서 확인할 수 있습니다.

잘 작동되는지 확인하려면 폰으로 테스트 서버에 접근해야 한다.

장고 | 폰으로 서버 테스트하기


결론

이제 장고 프로젝트에서 모바일 디바이스를 감지하는 방법을 알게 되었습니다. 이를 통해 다양한 디바이스에 최적화된 사용자 경험을 제공할 수 있습니다. 모바일, 태블릿, 데스크탑 등 다양한 환경을 고려한 웹사이트를 구축하여 사용자 만족도를 높여보세요.

이 가이드가 도움이 되셨길 바라며, 장고를 활용한 더욱 효율적인 웹 개발을 기원합니다.

장고 리스트