Django:通过user-agent判断请求是来自移动端还是PC端(电脑端)

第一种思路:

根据博文 Djano的request.META是什么?的研究成果,先判断有无键HTTP_SEC_CH_UA_MOBILE,如果没有,再去按博文 网站如何判断请求是来自手机-移动端还是PC-电脑端?如何让网站能适应不同的客户端? 中判断user-agent中的关键字来判断。

以下是判断有无键HTTP_SEC_CH_UA_MOBILE的代码:

python 复制代码
def ismobile(requestmeta):
    if "HTTP_SEC_CH_UA_MOBILE" in requestmeta:
        print("exist")
    else:
        print("not exist")

这种思路经实测,很多浏览器都没有键HTTP_SEC_CH_UA_MOBILE,比如PC上的搜狗浏览器、移动端上的QQ浏览器、傲游浏览器同没有。所以我决定不用这种思路。

第二种思路:

直接去判断user-agent有关移动端的关键词,就根据 博文 网站如何判断请求是来自手机-移动端还是PC-电脑端?如何让网站能适应不同的客户端? 中提供的关键词来判断。

不难,很快就实现了,并且经测试,很健壮。

views.py中的代码如下:

python 复制代码
# -*- coding: utf-8 -*-

from django.shortcuts import render  # 默认导入的模块
import app1.myf1

def index(request):
    meta1 = request.META
    mobile_flag = app1.myf1.ismobile(meta1)
    if mobile_flag == 0:
        print("it is PC client")
        return render(request, 'index_pc.html')  # 将渲染结果输出到index_pc.html模板中
    elif mobile_flag == 1:
        print("it is Mobile client")
        return render(request, 'mobile_temp.html')  # 因为还没有开发移动端,所以暂时用mobile_temp.html代替
    else:
        print("mobile_flag Error")
        return render(request, 'index_pc.html')  # 此种异常情况下将渲染结果输出到index_pc.html模板中

myf1.py中的代码如下:

python 复制代码
# -*- coding: utf-8 -*-

def ismobile(requestmeta):
    if "HTTP_USER_AGENT" in requestmeta:  # 判断存不存在是为了提高程序健壮性,万一哪个傻冒客户端没有USER_AGENT呢
        useragent1 = requestmeta['HTTP_USER_AGENT']
        useragent1 = useragent1.lower()  # 把useragent1里所有大写转换为小写
        if 'mobile' in useragent1 or 'android' in useragent1 or 'phone' in useragent1 or 'ipad' in useragent1:
            return 1
        else:
            return 0  # 如果不包含上面几个字符串,则认为是PC端。
    else:
        print("Error,HTTP_USER_AGENT is not exist")
        return 0  # 此种异常情况认为是PC端
相关推荐
言乐61 小时前
通过 3D 动画直观演示球形瓶内可滑动半圆机构在倾倒时防粘盖、回正时刮膏体的运动学过程
python·3d·django·virtualenv·pygame
小蒜学长9 小时前
基于Django+Vue喵汪联盟宠物领养系统的设计与实现(代码+数据库+LW)
后端·python·django·宠物领养系统·流程规范化
小咕聊编程1 天前
教育大数据可视化系统
python·django·flask
高洁011 天前
大模型检索增强生成(RAG)的技术原理与架构设计
人工智能·深度学习·机器学习·django·迁移学习
小咕聊编程1 天前
基于Django的个人摄影博客网站设计与开发
后端·python·django
treasure1401 天前
Django复习笔记(2026年10月)
后端·python·django·api·web·drf
ycydynq2 天前
django 添加信息时,对外键设置条件
数据库·python·django
智购科技无人售货机厂家2 天前
自动售货机物联网平台为什么会出现在线状态不一致?~YH
python·单片机·嵌入式硬件·django·pygame
FYKJ_20103 天前
springboot高考志愿填报推荐系统14332-计算机课程设计、毕业设计
javascript·spring boot·python·架构·django·课程设计·高考
我的xiaodoujiao3 天前
Django 权限系统项目实战详细图文教程 3--系统登录功能实现
后端·python·django