[장고] 사용자 접속 환경 확인 - 모바일 디바이스 식별하기
현대 웹 개발에서 중요한 과제 중 하나는 다양한 디바이스에서 원활하게 작동하는 웹사이트를 구축하는 것입니다. 사용자가 어떤 디바이스로 웹사이트에 접근하는지 식별하는 것은 특히 중요합니다. 이를 통해 사용자 경험을 최적화하고, 맞춤형 콘텐츠를 제공할 수 있습니다. 이 글에서는 장고 미들웨어를 이용해 사용자가 어떤 디바이스로 페이지를 요청했는지 감지하는 방법을 알아보겠습니다.
프로젝트 설정
먼저, 프로젝트 폴더(예: 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 코드에서 확인할 수 있습니다.
잘 작동되는지 확인하려면 폰으로 테스트 서버에 접근해야 한다.
결론
이제 장고 프로젝트에서 모바일 디바이스를 감지하는 방법을 알게 되었습니다. 이를 통해 다양한 디바이스에 최적화된 사용자 경험을 제공할 수 있습니다. 모바일, 태블릿, 데스크탑 등 다양한 환경을 고려한 웹사이트를 구축하여 사용자 만족도를 높여보세요.
이 가이드가 도움이 되셨길 바라며, 장고를 활용한 더욱 효율적인 웹 개발을 기원합니다.