python flask 网页适应手机端浏览器的编程方法

2023-11-16

1.使用flask在电脑端开发了一个论坛网址,想在手机端浏览看看,却发现根本装不下,并且导航栏元素还消失了。

先看电脑端访问是正常的

而手机端导航条不见了

#### 这是因为手机和电脑屏幕分辨率不同导致的。最简单的办法就是添加自适应宽度,并缩放页面。
<meta name="viewport" content="width=device-width, initial-scale=0.3">

这里宽度自适应,定义初始缩放值0.3,就是原来页面的0.3倍。 想详细了解可以看这篇博客:详解meta-viewport标签
不过,这样直接改电脑端页面显示效果就太小了,所以可以从新定义手机端的模板文件。

2.改写flask后端程序,适应电脑端和手机端,并自动渲染对应的模板文件

*首先加入手机端模板文件
之前的电脑端工程文件结构

加入手机端模板文件,m_ 代表移动端模板文件,注意必须在templates文件夹下。

3.在视图函数中选择渲染不同的模板文件

基本思路是 使用request.user_agent,得到访问的设备信息,我type了一下,好像没有具体类型,于是在这里先转为字符串处理。
基本的渲染思路如下:

if 'Android' in str(request.user_agent):
	return render_template("mobile.html")
else:
    return render_template("pc.html")

不过一旦要渲染的模板文件多了,这样写就显得不是很简洁。我是采用了自定义装饰器来简化’Android’ in str(request.user_agent)。

def Device_Identify(function):
     @wraps(function)
     def wrapper(*args,**kwargs):
        if 'Windows' in str(request.user_agent):
            device = 'Windows'
        if 'Android' in str(request.user_agent):
            device = 'Android'
        else:
            device ="Linux"
        setattr(g,"device",device) #给全局属性g绑定一个属性名为device,值为device对应的值
        return function(*args,**kwargs)
     return wrapper

这样,在其他视图函数下都可以使用,给g绑定的全局属性,来判断此时访问设备是什么。

@bp.route("/")
@Login_request
@Device_Identify # 识别设备装饰器
def index():
     if g.device == 'Android': # 如果访问端是安卓平台
          questions = QuestionModel.query.order_by(db.text("-create_time")).all()
          return render_template("m_index.html",questions=questions) # 对应得移动端模板
     else:
          questions = QuestionModel.query.order_by(db.text("-create_time")).all()
          return render_template("index.html",questions=questions)

如果有精力和事件。就可以把对应的电脑端模板,通过css不断调整,来适应手机端。只通过initial-scale来缩放,手机端也可以正常使用,只是界面字体和组件显示会比较小。
如下是使用initial-scale,并稍微使用css调整的效果。

这里是结束!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python flask 网页适应手机端浏览器的编程方法 的相关文章

随机推荐

  • 存在隐患 : 3 racks are required for the erasure coding policies: RS-6-3-1024k. The number of racks is on

    刚装的CDH6 2 1版本的集群 172 30 81 203 manager 172 30 81 204 node1 172 30 81 205 node2 172 30 81 206 node3 存在隐患 9 DataNodes are
  • 安卓中高级开发面试知识点之——缓存

    几乎所有的项目都做了缓存 但是缓存做的怎么样 其实只有我们自己知道 缓存做的好 没有网络也能流畅的使用 再多的数据请求都不会出现卡顿延迟等待很久的情况 程序中除了图片缓存 三级缓存 还有信息缓存 当用户无法联网时 app会默认显示缓存的数据
  • 线速度和角速度

    转自 https baike baidu com item E7 BA BF E9 80 9F E5 BA A6 1532652 fr aladdin https baike baidu com item E8 A7 92 E9 80 9F
  • 人脸识别是最早走向实际应用的技术之一

    会员的刷脸消费 适合特殊场景下的消费 如健身俱乐部 夜店等无卡场所 目前 众多连锁超市 商城百货等多家医院 地铁都在普及刷脸支付 没有什么人和事可以随随便便成成功 商海战役亦如是 正因为刷脸支付给商家和消费者带来了如此多的便利和实惠 所以刷
  • (转)StyleCop

    微软的StyleCop作为一款代码分析插件 集成到Visual Studio 2008和Visual Studio 2010之中 可以帮助开发人员迅速地理清编程规范问题 对确保软件质量 确保软件开发效率而言 意义非凡 与同样出自微软的另一款
  • python运行时:ModuleNotFoundError: No module named ‘tensorflow‘

    TensorFlow报错 python或者anaconda运行时显示 一般的解决方案 pip install upgrade ignore installed tensorflow 或者 pip install user upgrade i
  • oom killer 详解

    一 oom killer理解和日志分析 知识储备 oom killer日志分析 这是前篇 准备一些基础知识 带着问题看 1 什么是oom killer 是Linux内核设计的一种机制 在内存不足的时候 选择一个占用内存较大的进程并kill掉
  • Navicat使用HTTP通道服务器进行连接mysql数据库(超简单三分钟完成),centos安装nginx和php,docker安装nginx+php合并版

    序言 因为数据库服务器在外网是不能直接连接访问的 但是可以访问网站 网站后台就能访问数据库 所以在此之前 访问数据库的数据是一件非常麻烦的事情 在平时和运维的交流中发现 他们会使用ssh通道进行连接访问数据库 之前并没在意这个东西 直到运维
  • moment函数转换后的时间不正确,带有 “sa“等奇怪的字母

    目录 一 问题 二 解决方法 三 总结 一 问题 1 使用moment函数转换当前日期的格式为 年 月 日 结果转换出来竟然有一些 字母 迷之自信 这不就是这样吗 给了转换格式 给了转换时间 字母就出现这种奇葩的情况 1 代码如下 let
  • 子类化QAbstractTableModel,实现table列排序和整列拖动功能

    子类化QAbstractTableModel 实现table列排序和整列拖动功能 本程序基于Qt5 9 9 Qt creator 4 11 0实现 效果图 1 子类化QAbstractTableModel 主要是实现QAbstractTab
  • 减一天 日期函数_【Excel】日期加减运算法则

    前几天小八和大家分享了如何使用快捷键和函数 快速的输入日期 如果有人不记得了 可以再回顾下 链接如下 Excel 日期木有改 又被领导骂了 除了怎么输入 我想大家更头疼的是 日期怎么参与计算 今天小八就来分享几个日期计算的方法 1 加减1天
  • python实现简易五子棋小游戏(三种方式)

    tkinter库 Python的标准Tk GUI工具包的接口 示例 from tkinter import root Tk 你的ui代码 Label root text hello world pack root mainloop 弹窗结果
  • VS Code集成终端字体修改 & 字体颜色、大小修改方法

    文章目录 VS Code中设置颜色的方法 字体以及字体大小修改 参考 VS Code中设置颜色的方法 通过将以下内容添加到用户设置中 ctrl 并搜索 workbench 然后点击 Edit in settings json 在最后加上如下
  • 国家智慧教育公共服务平台(2023年暑期教师研修)

    前言 最近又要看2023年暑期教师研修高等教育教师专业发展 抓包发现开启倍数无效了 要一个一个点击看视频 岂不是累死人 于是想个办法解放双手 该网站观看视频时 客户端间隔20 50s向服务端发送一个POST请求 服务器每秒返回ts响应 1
  • python数据分析预处理z-score标准化

    一 z score标准化的python代码 import pandas from pandas import read excel from sklearn import preprocessing dataset read excel p
  • 强化学习入门《Easy RL》

    什么是强化学习 强化学习关注的是智能体 Agent 在复杂的环境 Environment 中如何最大化获得的奖励 Reward 智能体和环境两部分组成了强化学习 在强化学习过程中 智能体与环境一直在交互 智能体在环境中获取某个状态后 它会利
  • python学习笔记#2元组和列表

    python学习笔记 2元组和列表 文章目录 python学习笔记 2元组和列表 前言 一 string包含引号 二 复杂数据类型 1 序列 2 tuple 元组 2 list 列表 总结 前言 学习python的复杂数据类型 tuple和
  • 以element ui为例分析前端各种弹窗和对话框的使用场景与区别

    文章目录 摘要 Dialog 对话框 Drawer 抽屉 Notice 通知 MessageBox 弹框 Popconfirm 气泡确认框 Message 消息提示 Notification 通知 Dialog 对话框与Drawer 抽屉的
  • MySQL中的锁机制详解

    概述 事务的隔离性 隔离级别 是由锁来保证的 并发访问数据的情况分为 1 读 读 即并发事务相继读取相同的记录 因为没涉及到数据的更改 所以不会有并发安全问题 允许这种情况发生 2 写 写 即并发事务对相同记录进行修改 会出现脏写问题 因为
  • python flask 网页适应手机端浏览器的编程方法

    1 使用flask在电脑端开发了一个论坛网址 想在手机端浏览看看 却发现根本装不下 并且导航栏元素还消失了 先看电脑端访问是正常的 而手机端导航条不见了 这是因为手机和电脑屏幕分辨率不同导致的 最简单的办法就是添加自适应宽度 并缩放页面 这