当前位置: 首页 > 编程日记 > 正文

像数据分析一样写 Web 页面,这个 Python 库做到了!

ff1ae64923a3e0a8e4e09fe0d9631bbd.gif

作者|刘早起

来源|早起Python

提起用 Python 写一个 web 页面,总是会想起Django/Flask等这样的大家伙。

他们确实好用,但就是流程繁琐,比如有时就想写一个简单的页面,比如问卷调查,拿 Django 来说吧总要经过安装、启动、配置、创建app、注册路由、写各种 html/css/js 文件,小白的话说不定就卡死在哪一步了。

尤其对于数据分析相关用户,我就想写个页面展示个报告,有没有更简单的选择?

恰好最近从一些文章中了解到一个新的 web 开发库 PyWebIO ,我也尝试着用他去写一个页面,结果很惊艳,不用css什么乱七八糟的文件,一个py脚本就能搞定一整个页面!

并且写页面的过程就像用pandas进行数据分析一样轻松!所以我打算拿几篇文章来循序渐进的分享这个库的相关操作,本文是第一篇,主要介绍一下基本流程与常见操作。

01

安装与基本流程

安装 PyWebIO 和其他的第三方库一样使用pip install PyWebIO就行,没有任何难度,此处不做多讲。

但是在正式讲解一些常见的操作之前,我需要解释一下,为什么说用 PyWebIO 写页面就像数据分析一样。

回想一下我们使用Python进行数据分析的流程,启动 Jupyter Notebook 导入数据,进行数据预览、筛选、拆分合并等操作,得到自己满意的结果,最后保存方便查看,更重要的是一行代码一个结果,方便调试。

而使用 PyWebIO 开发页面流程也是类似,我们不用过分关心CSS、JS等文件,全程我们只需要操作一个py脚本。

也不用关心数据库配置、前后端交互,就像上面的数据分析一样,创建一个空白页面,然后一行代码添加一部分内容,内容可以实时编译输出,甚至可以在 ipython 中进行开发👇

26c8c07c37dc715c91d11bb1f533f06f.gif

与其说是第一个第三方库,我更愿意称它为一个 APP ,因为一行代码对应一个操作,例如可以调用 put_text()put_image()put_table() 等函数输出文本、图片、表格等内容到浏览器!

当然,之所以能这么便捷高效的开发页面,基于别人封装好的,高度精准定义好的功能,因此使用场景十分有限,例如问卷调查、表单填写、数据报告展示等简单的、个人使用的,且对样式、特效等不做太高要求的场景。

关于它让人不爽的地方,我会在后面的系列文章中进行讲解,这不影响它确实是一个高效率的web开发库,下面让我对其常见操作进行讲解。

02

来!现在就开发页面!

本节我将介绍使用 PyWebIO 开发页面中的一些常见操作。

当然,我深知阅读文档的枯燥与痛苦,所以我将以从 0 实现下面的页面为最终目标进行讲解!

21bab135e17dbf33e714dc79e5fc9195.pngd438ea5580db8f7b6f4f037815ca870a.png333281e205516e9e766117617ac88db1.png

左右滑动查看更多

插入文字

平时我们写 html 会用类似<h1>标签来控制标题,用<p>``<span>这样的标签来输出文字。

PyWebIO 中可以使用 markdown 来实现类似效果,语法是put_markdown(),将markdown添加进去,就会自动渲染

put_markdown(("""# 👏 我的第一个页面这是早起Python教我用Python写的第一个页面!写点什么呢?到底写一点什么好呢?好像真的没什么好写的,到底写什么呢?我也不知道该写点什么, 反正有点什么内容就好了!"""), lstrip=True)

效果如下

177862ae3c8168667b5f26934f8f1e67.png

插入图片

静态元素是一个网页的重要组成部分,使用 PyWebIO  插入也是很简单,使用 put_image() 可以插入图片,代码如下

put_image(open('iShot2021-10-29 17.14.08.png', 'rb').read())

随手用手机拍了一张图片,效果如下👇

6cfec705180c7e6dc76841d57dfcfff6.png

插入表格

传统html使用table插入表格,这里使用类似方法

put_table([['商品', '价格'],['苹果', '5.5'],['香蕉', '7'],
])

效果如下,后面如果表格内容需要变化,可以写个函数让他动态更新

66b02efa11717d40ab33ac78604d1663.png

插入代码

插入代码也是没有问题的

962c71646790beb1fe3a43711603e90b.png

展示效果如下

9b1a66b58ebdc35f25a4620ebdbae996.png

交互 - 收集信息

上面都是常规的静态元素添加,其他一些库也能做到,甚至手写原生html都行,下面来点更高级的!

首先是简单的交互式输入框,开发者已经写好了,调用命令也很简单

name = input("你的名字是什么??")

只用一行代码,效果如下,当然这也意味着样式什么的不支持修改

6c0eefb9750c8df1bb1b728b4d9b5663.png

这里我们选择将接收到消息打印出来,当然也是可以写一个函数,将数据进行保存,这会在后面带大家开发问卷系统讲到

2394fe82b007840d32ef2b45782aba07.png

交互 - 隐藏输入

如果我们在开发问卷系统,有些选项希望用户输入时可以隐藏输入,就像输入密码一样

password = input("不想让别人看见你的输入?", type=PASSWORD)

1fdfa2e0794f31e160baf87c6c5e8612.png

交互 - 输入代码

通过交互输入框接收代码也是可以的,后面我讲介绍如何让代码执行,下面是可以实现的样式

code = textarea('Code Edit', code={'mode': "python",  # code language'theme': 'darcula',  #  Codemirror theme
}, value='import something\n# Write your python code')

1c6378922f546bbaa8974c80744d2454.png

交互 - 按钮功能

其实上面说的存储数据也好,执行代码也好,本质上就是给这个提交按钮添加一个功能,我们来实现最简单的计算器。也就是点击提交,计算两数相加

data = input_group("做个计算器", [input('第一个数字', name='num1', type=NUMBER),input('第二个数字', name='num2', type=NUMBER)])put_text(f"计算结果是{data['num1']} + {data['num2']} = {data['num1'] + data['num2']}  ")

09b59d5c0ccad05fe358b017bab6a4af.png

因为简单,连函数都不用定义,直接 f-string 就解决了,如果需要复杂的功能,就可以定义一个函数,点击按钮就执行这个函数

如何渲染页面

从上面的介绍不难看出,用 PyWebIO 就好比往一张白纸里面塞东西。

但我还没说,如何创建一张白纸以及如何渲染页面,下面是一个本文用的最简单的框架

from pywebio import *
from pywebio.input import *
from pywebio.output import *def myfirstpage():somethingif __name__ == '__main__':start_server(myfirstpage,port=8082,auto_open_webbrowser=True)

可以看到,我们只要定义一个函数,然后往里面塞各种内容,最后通过start_server()指定端口启动就行!

03

小结

至此,有关  PyWebIO  开发页面的基本流程与常见操作就介绍完了。

是不是就像数据分析一样,拿着各种函数对数据一通操作,我们也是拿着各种写好的功能,需要一个添加一个! 如果你感兴趣的话,我强烈建议你自己敲一遍代码感受一下。

e0ca1dfb42c63a049d8b4dca5eac8ad1.gif

1864c4e9f821ca26378dbda05a0c29ab.png

技术

Golang+Python实现又一技术

资讯

人工智能又将如何破局?

资讯

老龄化的Facebook能否再换新颜

资讯

英特尔开源编程工具 ControFlag

04d2115a55d9d12155fd73cda5b95a3e.png

分享

09983a8834f4070b0ff2b3d9c57df7f1.png

点收藏

4eaef1d487b919aaf6ea3ff61db1c424.png

点点赞

03f6866deeb246619fa81e2ee176252f.png

点在看

相关文章:

loadrunner 如何做关联

在页面中为了防止CRSF攻击&#xff0c;每次访问登录页面时&#xff0c;在浏览器器端生成一个token。 在提交时检验这个token是否有效&#xff0c;提交后token自动失效。 如果使用loadrunner来测试此系统话需要做一个关联&#xff0c;把这个token作为一个参数进行提交。 做关联有…

让你的数据离CPU更近一些

让你的数据离CPU更近一些 Jim Gray&#xff1a;RAM是硬盘,硬盘是磁带 永远只做自己最擅长的事情 不是所有的任务都需要同步执行

现在很火的答题赢钱游戏,让我来简单教你怎么做自动答题器

一、前言&#xff1a; 现在最火的直播游戏&#xff0c;那就是答题赢钱直播了&#xff0c;如百万英雄、芝士超人、花椒直播、冲顶大会等等&#xff0c;这些游戏的玩法都很简单&#xff0c;答对12题即可瓜分奖金了。玩法虽然简单&#xff0c;但是要能完全答对12题难度还是挺高的&…

OAuth认证协议原理分析及使用方法

twitter或豆瓣用户一定会发现&#xff0c;有时候&#xff0c;在别的网站&#xff0c;点登录后转到 twitter登录&#xff0c;之后转回原网站&#xff0c;你会发现你已经登录此网站了&#xff0c; 这种网站就是这个效果。其实这都是拜 OAuth所赐。 OAuth是什么&#xff1f; OAuth…

一次图文并茂的***完整测试二

任务&#xff1a;某公司授权你对其服务器进行******。对某核心服务器进行***测试&#xff0c;据了解目标机为Windows 2003 Server系统&#xff0c;ip地址为10.1.1.191&#xff0c;在C盘的根目录下存储有两个敏感文件这里就用&#xff08;key1.txt,key2.txt&#xff09;表示&…

神经网络学习到的是什么?(Python)

作者|泳鱼来源|算法进阶神经网络&#xff08;深度学习&#xff09;学习到的是什么&#xff1f;一个含糊的回答是&#xff0c;学习到的是数据的本质规律。但具体这本质规律究竟是什么呢&#xff1f;要回答这个问题&#xff0c;我们可以从神经网络的原理开始了解。一、 神经网络的…

Spring MVC原理

摘要: Spring MVC工作流程图springMVC工作流程图图一图二开发工具1.Eclipse IDE&#xff1a;采用Maven项目管理&#xff0c;模块化。2.代码生成&#xff1a;通过界面方式简单配置&#xff0c;自动生成相应代码&#xff0c;目前包括三种生成方式&#xff08;增删改查&#xff09…

linux下poll和epoll内核源代码剖析

作者&#xff1a;董昊 博客链接http://donghao.org/uii/ poll和epoll的使用应该不用再多说了。当fd很多时&#xff0c;使用epoll比poll效率更高。 我们通过内核源码分析来看看到底是为什么。 poll剖析poll系统调用&#xff1a;int poll(struct pollfd *fds, nfds_t nfds, int t…

百度副总裁马杰:实现元宇宙,技术要过三道坎

近来&#xff0c;元宇宙一词就像龙卷风瞬间席卷整个科技圈&#xff0c;一时间所有新概念层出不穷&#xff0c;无数科技公司蜂拥而至扎堆元宇宙。先是在线游戏创作平台Robolox把元宇宙写进招股书里&#xff0c;成为“元宇宙第一股”。后有扎克伯格宣布将Facebook更名为Meta&…

consolez设置

2019独角兽企业重金招聘Python工程师标准>>> 菜单”—>Edit—>Setting...—>Behavior—>选择“Copy on select” “菜单”—>Edit—>Setting...—>Mouse—>Paste text—>Right 最后一个重点说明的问题是Console2对中文的支持问题。默认情…

dstat用法;利用awk求dstat所有列每列的和;linux系统监控

安装&#xff1a;yum install -y dstatdstat命令是一个用来替换vmstat、iostat、netstat、nfsstat和ifstat这些命令的工具&#xff0c;是一个全能系统信息统计工具。与sysstat相比&#xff0c;dstat拥有一个彩色的界面&#xff0c;在手动观察性能状况时&#xff0c;数据比较显眼…

PHP内核介绍及扩展开发指南—基础知识

一、 基础知识 本章简要介绍一些Zend引擎的内部机制&#xff0c;这些知识和Extensions密切相关&#xff0c;同时也可以帮助我们写出更加高效的PHP代码。 1.1 PHP变量的存储 1.1.1 zval结构 Zend使用zval结构来存储PHP变量的值&#xff0c;该结构如下所示&#xff1a; type…

腾讯汤道生:数实融合成为行业“必答题”,腾讯未来打造四大引擎

11月3日&#xff0c;腾讯高级执行副总裁、云与智慧产业事业群CEO汤道生在2021腾讯数字生态大会上表示&#xff0c;“数实融合”正在从“选答题”&#xff0c;变成每个行业都要面对的“必答题”&#xff0c;腾讯未来将打造用户、技术、安全和生态四大引擎&#xff0c;助力各行各…

shell编程基础(2)---与||

shell 编程重要的应用就是管理系统&#xff0c;对于管理系统中成千上万的程序而言&#xff0c;查询某个文件名是否存在&#xff0c;并且获取该文件名所指代文件基本信息是系统管理员的基本任务。shell命令可以很轻松的完成这项任务。 #program this is a example for #########…

基于qml创建最简单的图像处理程序(1)-基于qml创建界面

《基于qml创建最简单的图像处理程序》系列课程及配套代码基于qml创建最简单的图像处理程序&#xff08;1&#xff09;-基于qml创建界面http://www.cnblogs.com/jsxyhelu/p/8343310.html课程1附件https://files.cnblogs.com/files/jsxyhelu/%E9%98%B6%E6%AE%B5%E4%BB%A3%E7%A0%8…

存储方式与介质对性能的影响

摘要 数据的存储方式对应用程序的整体性能有着极大的影响。对数据的存取&#xff0c;是顺利读写还是随机读写&#xff1f;将数据放磁盘上还将数据放flash卡上&#xff1f;多线程读写对性能影响&#xff1f;面对着多种数据存储方式&#xff0c;我们如何选择&#xff1f;本文给大…

struts配置文件没有标签提示

2019独角兽企业重金招聘Python工程师标准>>> struts配置文件没有标签提示 原因&#xff1a;" http://struts.apache.org/dtds/struts-2.0.dtd"是通过网络的形式帮你下载对应的dtd文件&#xff0c; 如果机器没有联网&#xff0c;就不会有提示 解决办法&…

iPhone 隐私新规下的“大地震”:四大平台损失近百亿美元,“连用户是男是女都分不清……”

整理 | 郑丽媛 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 大家有这样的经历吗&#xff1f;前一秒刚在聊天软件上跟朋友分享了一款产品&#xff0c;下一秒就能在其他 App 中看到这款产品的广告推送&#xff0c;不了解内情的人说不定还会感慨一句&#xff1a;“…

Python 判断类型

类型判断&#xff1a;isinstance(obj, type) 方法 &#xff1a; isinstance(obj, type) print (isinstance(3, int)) # True print (isinstance(3, str)) # False print (isinstance(3, list)) # False print (isinstance([1,2,3], list)) …

php打印warning日志引发的core追查

内容 春节期间线上出了两个php-cgi的core&#xff0c;具体追查过程如下&#xff1a; 一、 Core信息 file core.xxx bug.php-cgi.3611.1296586902: ELF 64-bit LSB core file AMD x86-64, version 1 (SYSV), SVR4-style, from ‘php-cgi’ gdb ~/php5/bin/php-cgi core.xx…

BIZTALK项目中WEB引用WEBSERVICES服务时候报错

近期工作中须要完毕通过BIZTALK完毕调用WEBLOGIC公布的WebServices服务&#xff0c;环境搭建好后&#xff0c;打开VS开发工具新建一个BIZTALK项目&#xff0c;加入WEB引用将对方公布的地址拷贝上去&#xff0c;能够正常浏览到&#xff0c;然后点击加入引用button&#xff0c;这…

百度“知识增强的跨模态语义理解技术”获国家技术发明奖

11月3日&#xff0c;2020年度国家科学技术奖励大会在京举行&#xff0c;百度“知识增强的跨模态语义理解关键技术及应用”获国家技术发明二等奖。 该技术旨在通过构建大规模知识图谱&#xff0c;关联跨模态信息&#xff0c;通过知识增强的自然语言语义表示方法&#xff0c;解决…

Objective C浅拷贝和深拷贝

##浅拷贝 浅拷贝就是对内存地址的复制&#xff0c;让目标对象指针和源对象指向同一片内存空间。如&#xff1a; char* str (char*)malloc(100); char* str2 str; 复制代码浅拷贝只是对对象的简单拷贝&#xff0c;让几个对象共用一片内存&#xff0c;当内存销毁的时候&#xf…

我常用的那些linux命令

我常用的那些linux命令 用linux也有些年头了&#xff0c;说来也忏愧&#xff0c;说是有些年头了&#xff0c;其实也还是个不长进的主。记得第一次接触linux是boss跟我说的怎么操作&#xff0c;什么编辑模式&#xff0c;按i&#xff0c;a&#xff0c;o进入编辑模式。在一个黑乎乎…

2021腾讯数字生态大会:腾讯安全聚焦安全共建,护航数字经济发展

11月3日&#xff0c;以“数实融合 绽放新机”为主题的2021腾讯数字生态大会在武汉开幕。在首日的主峰会上&#xff0c;多位腾讯高管及行业领袖、企业家对数字时代如何建设安全底座&#xff0c;发表了看法。 腾讯高级执行副总裁、云与智慧产业事业群CEO汤道生指出&#xff0c;没…

Oauth认证协议

原文地址腾讯QQ第三方登录的实现原理&#xff1f; Oauth当中的角色&#xff1a; 1.Service Provider&#xff08;服务提供方&#xff09;&#xff1a; 服务提供方通常是网站&#xff0c;在这些网站当中存储着一些受限制的资源&#xff0c;如照片、视频、联系人列表等。这些网站…

“分布式哈希”和“一致性哈希”的概念与算法实现

分布式哈希和一致性哈希是分布式存储和p2p网络中说的比较多的两个概念了。介绍的论文很多&#xff0c;这里做一个入门性质的介绍。 分布式哈希(DHT)   两个key point&#xff1a;每个节点只维护一部分路由&#xff1b;每个节点只存储一部分数据。从而实现整个网络中的寻址和存…

7000 字 23 张图,Pandas一键生成炫酷的动态交互式图表

作者 | 俊欣来源 | 关于数据分析与可视化今天小编来演示一下如何用pandas一行代码来绘制可以动态交互的图表&#xff0c;并且将绘制的图表组合到一起&#xff0c;组成可视化大屏&#xff0c;本次小编将要绘制的图表有折线图散点图直方图柱状图饼图面积图地图组合图准备工作我们…

手把手教你使用zabbix监控nginx

zabbix监控nginx&#xff0c;多亏了容哥(杨容)的帮忙&#xff0c;为了感谢容哥的帮助&#xff0c;写了这篇文章。环境介绍&#xff1a;服务器系统版本&#xff1a;CentOSrelease 6.6 (Final)内核版本&#xff1a;Linux hk_nginx2.6.32-504.3.3.el6.x86_64ZabbixServer版本&…

理解多线程设计模式

多线程设计模式&#xff1a;1.Single Threaded Execution Pattern [同一时刻只允许一个线程操作] 比喻&#xff1a;三个挑水的和尚&#xff0c;只能同一时间一个人过桥&#xff0c;不然都掉河里喂鱼了。 总结&#xff1a;在多个线程同时要访问的方法上加上synchronized关键…