Files
DjangoAdmin_Flask_EleVue/utils/user_agent.py
T
DjangoAdmin DevandClaude 15f2a5e097 chore: 基线提交(重构前代码快照)
- git 初始化 + .gitignore 补全(根 .env / logs / instance / __pycache__ 等)
- 修复 utils/.gitignore 误将整个 utils/ 源码层忽略的问题,补入全部工具源码(含 ip2region.xdb)
- 含后端全部代码:application / extensions / utils / config / migrations
- 含前端 ui/(后续整体迁走)
- 不含根 .env(含密钥,本地保留)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 12:12:06 +08:00

75 lines
2.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
User-Agent解析工具模块
=============================================================
提供HTTP请求User-Agent的解析功能:
- parse_user_agent: 解析操作系统和浏览器信息
"""
import re
def parse_user_agent():
"""
解析User-Agent,获取操作系统和浏览器信息
通过正则匹配User-Agent字符串,识别客户端操作系统和浏览器类型。
支持 Windows、macOS、Linux、Android、iOS 及主流浏览器识别。
Returns:
dict: 包含os和browser的字典
{
'os': 'Windows 10', # 操作系统信息
'browser': 'Chrome' # 浏览器名称
}
无法识别时返回 '未知'
"""
from flask import request
user_agent = request.headers.get('User-Agent', '')
result = {
'os': '未知',
'browser': '未知'
}
if not user_agent:
return result
ua_lower = user_agent.lower()
# 操作系统识别规则(按优先级从高到低排列)
os_patterns = [
(r'windows nt 10\.0', 'Windows 10'),
(r'windows nt 6\.1', 'Windows 7'),
(r'windows nt 6\.2', 'Windows 8'),
(r'windows nt 6\.3', 'Windows 8.1'),
(r'windows nt', 'Windows'),
(r'mac os x', 'macOS'),
(r'linux', 'Linux'),
(r'android', 'Android'),
(r'iphone', 'iOS'),
(r'ipad', 'iOS'),
]
for pattern, os_name in os_patterns:
if re.search(pattern, ua_lower):
result['os'] = os_name
break
# 浏览器识别规则(按优先级从高到低排列)
browser_patterns = [
(r'edg', 'Edge'), # Edge 浏览器(基于Chromium)
(r'chrome', 'Chrome'), # Chrome 浏览器
(r'safari', 'Safari'), # Safari 浏览器
(r'firefox', 'Firefox'),# Firefox 浏览器
(r'msie', 'IE'), # Internet Explorer
(r'trident', 'IE'), # IE 11(Trident内核)
]
for pattern, browser_name in browser_patterns:
if re.search(pattern, ua_lower):
result['browser'] = browser_name
break
return result