Исходя из того, что вы ранее использовали промежуточное ПО для обнаружения мобильных устройств, я бы порекомендовал следующее:
Выберите порт Python для MobileESP (исходный код здесь) (спасибо Мариушу Месяку за рекомендацию) и поместите его в папку с именем mobileesp
в основании вашего проекта (где manage.py
). Добавьте пустой файл __init__.py
, чтобы Python увидел его как пакет.
Создайте новый файл middleware.py
в этом каталоге и заполните его:
import re
from mobileesp import mdetect
class MobileDetectionMiddleware(object):
"""
Useful middleware to detect if the user is
on a mobile device.
"""
def process_request(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
Наконец, обязательно включите 'mobileesp.middleware.MobileDetectionMiddleware',
в MIDDLEWARE_CLASSES
в файле настроек.
Имея это в своих представлениях (или в любом месте, где у вас есть объект запроса), вы можете выбрать is_phone
(для любых современных смартфонов), is_tablet
(для современных планшетов) или is_mobile
(для любых мобильные устройства вообще).