测试在django中使用django-user-agents
django-user-agents的作用
django-user-agents
是一个 Django
库,用于识别和解析用户代理字符串(User-Agent String)。用户代理字符串是由 Web 浏览器或其他客户端应用程序发送到服务器的标识符,用于描述客户端的软件、设备和操作系统等信息。
如何使用
1. 创建虚拟环境,安装django,并创建项目和应用,准备好使用环境
python -m venv myenv
myenv\Scripts\activate
pip install django -i https://pypi.tuna.tsinghua.edu.cn/simple
django-admin startproject mysite
python manage.py startapp web
2. 安装django-user-agents
pip install pyyaml ua-parser user-agents -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install django-user-agents -i https://pypi.tuna.tsinghua.edu.cn/simple
所有文件都安装后,
# pip list
Package Version
------------------ -------
asgiref 3.7.2
Django 5.0.1
django-user-agents 0.4.0
pip 23.3.2
PyYAML 6.0.1
setuptools 65.5.0
sqlparse 0.4.4
tzdata 2023.4
ua-parser 0.18.0
user-agents 2.2.0
3. 配置settings.py
- 把django_uesr_agents注册到apps,并配置缓存
# Application definition
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"web",
"django_user_agents", # 将django_user_agent添加到apps中
]
# Cache backend is optional, but recommended to speed up user agent parsing
# 翻译:缓存后端是可选的,但建议用于加快用户代理解析的速度。
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
# Name of cache backend to cache user agents. If it not specified default
# 缓存用户代理的缓存后端的名称。如果未指定,默认值将被使用。
# cache alias will be used. Set to `None` to disable caching.
# 将使用缓存别名。将其设置为“None”以禁用缓存。
USER_AGENTS_CACHE = 'default'
- 在
settings.py
文件中添加UserAgentMiddleware
MIDDLEWARE = [
"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",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
"django_user_agents.middleware.UserAgentMiddleware", # 这里添加
]
4. 使用
现在请求中将添加一个 user_agent
属性,你可以在 views.py
文件中使用它
def my_view(request):
# Let's assume that the visitor uses an iPhone...
request.user_agent.is_mobile # returns True
request.user_agent.is_tablet # returns False
request.user_agent.is_touch_capable # returns True
request.user_agent.is_pc # returns False
request.user_agent.is_bot # returns False
# Accessing user agent's browser attributes
request.user_agent.browser # returns Browser(family=u'Mobile Safari', version=(5, 1), version_string='5.1')
request.user_agent.browser.family # returns 'Mobile Safari'
request.user_agent.browser.version # returns (5, 1)
request.user_agent.browser.version_string # returns '5.1'
# Operating System properties
request.user_agent.os # returns OperatingSystem(family=u'iOS', version=(5, 1), version_string='5.1')
request.user_agent.os.family # returns 'iOS'
request.user_agent.os.version # returns (5, 1)
request.user_agent.os.version_string # returns '5.1'
# Device properties
request.user_agent.device # returns Device(family='iPhone')
request.user_agent.device.family # returns 'iPhone'
如果你启用了 django.core.context_processors.request
,那么 user_agent
也将通过 request
在模板中可用。也就是说,你可以在模板中通过 request.user_agent
来获取用户代理信息。
{% if request.user_agent.is_mobile %}
Do stuff here...
{% endif %}
django-user_agents
提供了一个名为 get_user_agent
的函数,它接受一个 request
参数并返回一个 UserAgent
实例。你可以使用它来获取用户代理信息。
from django_user_agents.utils import get_user_agent
def my_view(request):
user_agent = get_user_agent(request)
if user_agent.is_mobile:
# Do stuff here...
elif user_agent.is_tablet:
# Do other stuff...
django_user_agents
提供了几个模板过滤器。这些过滤器可以在 Django
模板中使用,以便根据用户代理信息进行条件判断或显示不同的内容。
你可以像使用其他 Django
模板过滤器一样使用这些过滤器。
{% load user_agents %}
{% if request|is_mobile %}
Mobile device stuff...
{% endif %}
{% if request|is_tablet %}
Tablet stuff...
{% endif %}
{% if request|is_pc %}
PC stuff...
{% endif %}
{% if request|is_touch_capable %}
Touch capable device stuff...
{% endif %}
{% if request|is_bot %}
Bot stuff...
{% endif %}