django-user_agents 中间件实战用 3 行配置为每个 request 注入 user_agent 属性【免费下载链接】django-user_agentsA django package that allows easy identification of visitors browser, OS and device information, including whether the visitor uses a mobile phone, tablet or a touch capable device.项目地址: https://gitcode.com/gh_mirrors/dj/django-user_agents如果你正在用 Django 开发网站一定会遇到这样的需求判断访客用的是手机、平板还是 PC进而决定渲染哪套页面、显示哪种布局。手动解析HTTP_USER_AGENT字符串既繁琐又容易出错。django-user_agents就是为解决这个问题而生的 Django 中间件包只需在settings.py里加 3 行配置它就会自动解析访客的浏览器、操作系统与设备信息并为每个request注入user_agent属性让识别移动设备这件事变得无比简单。本文面向新手手把手带你完成安装、配置、视图与模板实战全程只需几分钟。django-user_agents 能帮你做什么在动手之前先看看这个中间件到底能识别哪些信息能力说明 设备类型手机mobile、平板tablet、PC、触摸屏设备 浏览器信息浏览器家族如 Chrome、Safari、版本号 操作系统家族如 iOS、Android、Windows、版本号 爬虫识别判断访客是否为搜索引擎机器人bot底层依赖成熟的user-agents解析库准确率高且解析结果会缓存性能不用担心。django-user_agents 安装2 条 pip 命令搞定安装非常简单先安装依赖库再安装包本身pip install pyyaml ua-parser user-agents pip install django-user-agents安装完成后把django_user_agents加入INSTALLED_APPSINSTALLED_APPS ( # 其他应用... django_user_agents, )3 行配置在 settings.py 中开启 UserAgentMiddleware核心操作来了在settings.py的MIDDLEWARE列表中添加中间件并配置缓存MIDDLEWARE [ # 其他中间件... django_user_agents.middleware.UserAgentMiddleware, ] # 可选但推荐开启缓存加速 User Agent 解析 USER_AGENTS_CACHE default就这么简单。从这一刻起Django 的每个请求对象都会自动带上request.user_agent属性无需在视图里重复解析。如果你不想用缓存把USER_AGENTS_CACHE设为None即可关闭。在视图中读取 request.user_agent 判断设备类型中间件生效后在视图函数里直接使用request.user_agentdef my_view(request): # 假设访客正在使用 iPhone... request.user_agent.is_mobile # True request.user_agent.is_tablet # False request.user_agent.is_touch_capable # True request.user_agent.is_pc # False request.user_agent.is_bot # False # 浏览器信息 request.user_agent.browser.family # Mobile Safari request.user_agent.browser.version_string # 5.1 # 操作系统信息 request.user_agent.os.family # iOS # 设备信息 request.user_agent.device.family # iPhone看识别手机、平板、PC 就是一行属性的事。你还可以基于这些判断做响应式渲染、跳转移动端页面、统计客户端分布等业务逻辑。在模板中用过滤器快速判断设备类型django-user_agents还内置了 5 个模板过滤器让前端模板也能直接判断设备无需在视图里传参{% load user_agents %} {% if request|is_mobile %} 移动端内容... {% elif request|is_tablet %} 平板内容... {% elif request|is_pc %} PC 内容... {% endif %} {% if request|is_touch_capable %} 支持触摸设备的内容... {% endif %} {% if request|is_bot %} 爬虫访问提示... {% endif %}前提是在TEMPLATES的context_processors中启用django.template.context_processors.request这样模板里才能访问到request对象。这些过滤器定义在 user_agents.py实现非常精简每个过滤器只返回对应属性。开启缓存加速USER_AGENTS_CACHE 配置方法UA 字符串的解析依赖正则匹配虽然准确但相对耗时。为此django-user_agents内置了缓存机制相同 UA 字符串只解析一次后续直接命中缓存。你只需配置好 Django 的缓存后端CACHES { default: { BACKEND: django.core.cache.backends.memcached.MemcachedCache, LOCATION: 127.0.0.1:11211, } } USER_AGENTS_CACHE default # 指定缓存别名默认使用 default缓存键通过 UA 字符串的 MD5 生成对超长 UA 字符串也做了兼容处理具体实现可参考 utils.py。在正式环境中强烈建议开启缓存能显著降低每次请求的解析开销。源码导读中间件到底做了什么如果你好奇这 3 行配置背后的魔法不妨打开源码一探究竟。核心逻辑非常简洁middleware.pyUserAgentMiddleware通过SimpleLazyObject延迟绑定request.user_agent意味着只有当真正访问该属性时才执行解析不影响其他请求路径的性能utils.pyget_user_agent负责从request.META读取 UA 字符串优先查缓存未命中再调用parse()解析并写回缓存。这种中间件 懒加载 缓存的设计正是它轻量又高效的原因。常见问题与注意事项Django 版本兼容django-user_agents支持 Django 1.x 到 2.x老项目用MIDDLEWARE_CLASSES时同样适用空 UA 字符串部分爬虫或旧客户端不会发送 UA 头库对此做了兼容处理不会抛异常部署时注意若使用USER_AGENTS_CACHE None关闭缓存高流量场景下解析开销会明显增加请根据实际情况权衡。总结通过本文你已经学会了如何用 django-user_agents 中间件在 Django 中快速识别访客设备2 条命令完成安装3 行配置在settings.py中启用UserAgentMiddleware并指定缓存在视图中用request.user_agent读取浏览器、系统、设备信息在模板中用is_mobile、is_pc等过滤器零代码判断设备类型。从手写正则解析 UA到一行属性搞定设备识别django-user_agents 让移动端适配、设备统计、爬虫识别这些常见需求都变得又快又稳。如果你还没有试过现在就把它加进项目里体验一下吧【免费下载链接】django-user_agentsA django package that allows easy identification of visitors browser, OS and device information, including whether the visitor uses a mobile phone, tablet or a touch capable device.项目地址: https://gitcode.com/gh_mirrors/dj/django-user_agents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考