在前端开发中使用 Python

news2025/1/22 16:47:32

推荐给需要鼓捣前端应用又不熟悉 JS 的 Pythoner

简介

在使用 Python 进行数据分析的时候,经常需要创建一些动态、交互式的可视化作品。一般会用到如 Plotly、Pyecharts、Bokeh 等库,这些库都是基于前端技术创建可视化作品。所以在自定义可视化的时候,就会接触到很多前端开发的内容,但是很多 Pythoner 又不熟悉 JS 编程。这个时候就可以借助 Brython 这个库,直接在 JS 脚本里面写 Python 代码。听起来就很酷炫,下面通过简单的例子了解它的逻辑。

示例

直接看成品,下面是一个实现了生成随机数的网页,点击相关按钮实时生成随机数。直接把以下代码写入文本文件,并将后缀名改为 .html,然后在网页打开,就可以看到结果(需要联网)。

<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="https://cdn.jsdelivr.net/npm/brython@3/brython.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/brython@3/brython_stdlib.js"></script>
    <title>Test Brython</title>
</head>
<body onload="brython()" style="background-color: #1a1c1d;">
    <!-- Brython 版本 -->
    <button id="button">&nbsp; Roll the Dice! -- Brython &nbsp;</button>
    <button id="result"></button>
    <script type="text/python">
        import random
        from browser import document
        def dice(fakeargs):
            d = random.choice([1,2,3,4,5,6])
            document['result'].text = str(d)
        document['button'].bind('click', dice)  # dice 函数绑定 id 为 button 的按钮的 click 事件
    </script>
    <br><br>
    <!-- JavaScipt 版本 -->
    <button id="button2" type="submit" onclick="dice()">Roll the Dice! -- JavaScript</button>
    <button id="result2"></button>
    <script type="text/javascript">
        function dice(){
            d = Math.floor(Math.random()*6)+1;
            document.getElementById('result2').innerText = String(d);
        }
    </script>
</body>
</html>

简单解释一下,首先可以看到在 <head> 里面引用了 Brython 相关的 JS 文件。可以把它理解为,将 Python 解释器转化成对应 JS 代码,植入到网页。于是浏览器在渲染网页的时候就能读懂 Python 代码。这里导入了两个 JS 文件,一个是基本的解释器,一个包含了 Python 的标准库。如果需要导入第三库,目测是需要在本地安装:pip install brython,然后将需要引入的模块转换成对应的 JS 文件并引用(没实践过这一步)。

然后在 <body> 的开头需要加入 onload="brython()",相当于告诉前面引入的 JS 文件:准备来给我翻译 Python 代码。

最后就是在 <script> 里面写相关的 Python 代码,由于这里要实现的功能是点击按钮返回随机数,所以就定义了一个生成随机数的函数,然后将其与按钮的点击事件绑定(参考代码中的注释)。下图就是上述代码的渲染结果:

在这里插入图片描述

在代码中实现了两个版本,分别使用 Python 和 JS,可以对比看到这里面有一点区别:

  • <script> 需要标明代码类型
  • 在 JS 里面,document 对象代表整个网页的内容,而在 brython 里面,是使用 browser.document 这个子模块来实现 JS 里面的 document 对象的相应属性和功能
  • 并且引用属性的方式也不太一样,在 JS 需要 getElementByXXX,在 brython 中直接引用
  • 属性名称也不一样,比如上例的 text 对应 innerText(好像 JS 中某些标签也可以直接用 text?忘了)
  • 然后函数定义不太一样,JS 里面就是正常的函数,而 Python 函数需要强行给它加个没用到的参数(上例的 fakeargs)。对此我也是不得其解,能跑就行
  • 然后绑定函数与事件的方式不一样,JS 可以直接在对应的 HTML 标签里面通过 onclick 属性绑定点击事件,brython 可不可以就不知道了

大概就是这样,还是挺好理解的,当然前提还是要稍微有一点点对前端的了解。需要了解更多相关内容参考官方文档

相关阅读

阅读原文 | Paradise’s Blog

You Cannot Miss These 8 Python Libraries | Analytics Vidhya

Using Python for Frontend | Medium

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/703580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python3,有了此库,不需要再为导包顺序而烦恼了,小刀拉屁股,涨知识了。

usort详解 1、引言2、代码实战2.1 usort 安装2.2 代码示例 3、总结 1、引言 小鱼&#xff1a;小屌丝&#xff0c;这段代码是你的写的不&#xff1f; 小屌丝&#xff1a;是我写的啊&#xff0c;咋 鱼哥 小鱼&#xff1a;你看你的导包顺序&#xff0c;挺乱的 小屌丝&#xff1a;…

一些共享资料

大家好&#xff0c;才是真的好。 我们好久没有分享资料了&#xff0c;上次分享还是上次——我也忘记了多久。 本次Engage2023开完之后&#xff0c;从会议上也流出了很多各类技术和主题方面的PPT、PDF资料等&#xff0c;我搜索了一些Domino技术话题有关的共享在这里。 主题涉…

算法----二叉树的最近公共祖先

题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以是它…

轻量服务器外网访问不了的原因分析

​  轻量服务器外网访问不了原因的分析。很多用户在选择轻量服务器的时候都没考虑&#xff0c;直接就购买了&#xff0c;导致在使用的时候遇见了很多问题&#xff0c;下面我们就简单的聊聊关于轻量服务器外网无法访问的原因。 这里我们按照标题的意思可以解读为两种情况&…

2023最新互联网公司时长排行榜出炉

今天给大家分享一个对于选择公司来说另一个非常重要的参考指标&#xff1a;“互联网时长”。 我们在选择一个公司的时候&#xff0c;除了需要关注总收入package 以外&#xff0c;还需要考虑这家公司的加班时长是否人性化。 我们的工作时长是周工作小时数。法定工作时间是40小…

这8种Python加速运行技巧真棒

关注“Python专栏”微信公众号&#xff0c;回复暗号【面试大全】&#xff0c;立即领取面试题简历模板。 Python 是一种脚本语言&#xff0c;相比 C/C 这样的编译语言&#xff0c;在效率和性能方面存在一些不足。但是&#xff0c;有很多时候&#xff0c;Python 的效率并没有想象…

使用wpf做得计算器

最近在学习wpf&#xff0c;使用wpf做得计算器练手&#xff0c;实现功能增删改查&#xff0c;求平方根&#xff0c;倒数&#xff0c;取反&#xff0c;模拟实体计算器的M,MS,MC,MR功能 上面截图相关的计算为 8乘5加-2加3.2加&#xff08;9除以3的余数&#xff09;

一路乱飙,从手工测试进阶测试开发岗,“我“的测试之路不简单

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 测试人员的职能 …

StrSubstitutor和StrUtil占位符字符串替换

目录 一、commons-lang包下的StrSubstitutor1、使用场景一2、使用场景二 二、hutoo包下的StrUtil1、使用场景一2、使用场景二3、使用场景三 三、原生的三种方式 一、commons-lang包下的StrSubstitutor StrSubstitutor是commons-lang包提供的一个字符串替换类&#xff0c;整体使…

Redis实战——短信登录(二)

Redis代替session redis中设计key 在使用session时&#xff0c;每个用户都会有自己的session&#xff0c;这样虽然验证码的键都是“code”&#xff0c;但是相互不影响&#xff0c;从而确保每个用户获取到的验证码只能够自己使用&#xff0c;当使用redis时&#xff0c;redis的ke…

MCU单片机智能控制落地扇解决方案

随着科技进步和消费升级&#xff0c;消费者对电风扇的智能化需求日趋强烈。为了快速响应市场需求&#xff0c;以更低的成本打造智能电风扇。 MCU单片机智能控制落地扇解决方案以灵动微MM32SPIN040C主控。 方案采用的主控MM32SPIN040工作频率可达48MHz&#xff0c;内置16KB Fl…

虹科分享 | 拒绝自燃和爆炸,AGV电池如何进行实时监控和预测性维护?

Automated Guided Vehicle简称AGV&#xff0c;通常也称为AGV小车、自动导引运输车或无人搬运车等&#xff0c;指装备有电磁或光学等自动导引装置&#xff0c;能够沿规定的导引路径行驶&#xff0c;具有安全保护以及各种移载功能的运输车&#xff0c;通常用可充电的蓄电池来作为…

JumpServer开源堡垒机安装配置

JumpServer开源堡垒机安装与配置 一、简介二、下载与安装2.1、下载2.2、安装2.3、其他 一、简介 JumpServer 堡垒机帮助企业以更安全的方式管控和登录各种类型的资产。 支持 官网地址&#xff1a;https://www.jumpserver.org/index.html JumpServer 采用分层架构&#xff0c;…

【SNMP服务】网络杂谈(11)之什么是SNMP服务?

#2023 博客之星评选已开启–成为城市领跑者# 涉及知识点 什么是 SNMP&#xff0c;SNMP的特点&#xff0c;SNMP的服务&#xff0c;SNMP服务运行。深入了解SNMP技术。 原创于&#xff1a;CSDN博主-《拄杖盲学轻声码》&#xff0c;更多内容可去其主页关注下哈&#xff0c;不胜感…

Vue启用unity3D的exe

&#x1f430;个人主页&#xff1a;张清悠 &#x1f466;个人简介&#xff1a;张清悠&#xff0c;字澄澈&#xff0c;号寻梦客&#xff0c;爱好旅行、运动&#xff0c;主攻前端方向技术研发&#xff0c;副攻Unity 3D、C、Python人工智能等 &#x1f4dd;个人寄语&#xff1a;学…

parcel运行终端报错Uncaught ReferenceError: parcelRequire is not defined解决方案

我们通过指令 npm install parcel-bundler安装的parcel 运行起来会有一个报错 换个版本就好了 打开项目终端 我们先执行 npm uninstall parcel-bundler将错误的版本给他干掉 然后执行 npm install parcel安装正确的版本 然后运行项目 在浏览器中访问地址就一切正常了

如何预防DDOS和CC攻击

在当今数字化世界中&#xff0c;网络安全成为各行各业亟需解决的重要问题。最近&#xff0c;由于DDoS&#xff08;分布式拒绝服务&#xff09;和CC&#xff08;恶意咨询&#xff09;攻击事件的频繁发生&#xff0c;网络安全进一步引起了人们的关注。 据可靠消息源透露&#xff…

【SpringBoot】一、SpringBoot3新特性与改变详细分析

前言 本文适合具有springboot的基础的同学。 SpringBoot3改变&新特性 一、前置条件二、自动配置包位置变化1、Springboot2.X2、Springboot3.X 三、jakata api迁移1、Springboot2.X2、Springboot3.X3、SpringBoot3使用druid有问题&#xff0c;因为它引用的是旧的包 四 新特…

hdfs删除后空间不是释放,trash回收机制

一、现象 hdfs删除后&#xff0c;3天了还不删除&#xff0c;故排查排查问题 二、排查过程及原理 Trash机制&#xff0c;叫做回收站或者垃圾桶&#xff0c;默认情况下是不开启的。启用 Trash 功能后&#xff0c;从 HDFS 中删除某些内容时&#xff0c;文件或目录不会立即被清除&a…

【独家揭秘】微信可以自动加好友自动打招呼啦!

最近客户好友做某书内容爆了&#xff0c;每天都引流很多人来加他的微信&#xff0c;基本每天都需要花大量时间去通过好友&#xff0c;导致没有时间去做后续的维护发展客户&#xff0c;于是找到我大吐苦水&#xff0c;问我有什么办法可以解决&#xff1f; 嘿&#xff0c;这不巧了…