开发在线编程网站

news/2024/5/9 12:10:31/文章来源:https://blog.csdn.net/weixin_30230009/article/details/123887711

a849eb2905ed95a7ad900e60f5f96c4c.png

前言

初学者学习编程语言时,通常需要安装编程语言对应的环境,以Python为例,要学习Python,你就需要下载Python解释器并安装到本地,对于没有编程经验的人而言,这一步难倒了很多人,所以很多编程学习网站提供了在线编程的功能,学习者可以在网站上直接编写Python代码,然后点击运行,便可以在网页中得到相应的结果,这是怎么做到的?

最近刚好在做直播任务,即每周要做一定量的抖音直播,昨日直播时,临时起意,打算实现这个功能并将查资料、研究、开发的过程作为直播内容,开播时,我也不知道自己能不能弄出来,但因为刚做直播没多久,没啥人看,也就没啥包袱,直接开整,最后还是让我弄出来了。

29833ea5c9b9a03284ae38e3f1faa7bc.png

本篇文章就记录一下开发过程。

前端开发

经过简单的调研,放弃一开始想用Vue3开发的想法,直接使用HTML、CSS、JS搞则可,再上个Jquery,来使用Ajax,大体的流程为:

Code => Ajax => Python Web(Flask) => Run Code => Result

代码通过Ajax发给后端服务(Flask构建),不同编程语言使用不同的解释器去执行相应的代码,将执行的结果返回。

创建online-ide的目录,在目录下,构建如下结构:

C:\USERS\ADMIN\WORKPLACE\ONLINE-IDE
├─back-end├─serve.py
└─front-end├─ide.html├─css└─style.css├─js└─ide.js└─lib

front-end用于放前端代码,back-end用于放后端代码,我们将页面的主代码写到ide.html中,代码非常简单,就是用div构建不同的部分,然后用css简单修饰一下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Online IDE</title><!-- <link rel="stylesheet" href="css/style.css"/> --><link rel="stylesheet" href="front-end/css/style.css">
</head>
<body><div class="header"> Online IDE </div><div class="control-panel"><!-- 选择编程语言 -->选择编程语言:&nbsp;&nbsp;<select name="languages" id="languages" class="languages" onchange="changeLanguage()"><option value="c">C</option><option value="cpp">C++</option><option value="nodejs">Node.js</option><option value="python">Python</option></select></div><div class="editor" id="editor"><!-- 编写代码的地方 --></div><div class="button-container"><!-- 点击按钮,运行代码 --><button class="btn" onclick="runCode()"> 运行 </button></div><div class="output"><!-- 代码结果输出 --></div>
</body>
</html>

代码中有相应的注释,就不赘述了。

这里有个核心就是前端要有代码编辑区域,单纯的div是无法满足代码编辑需求的,比如代码高亮,简单的语法报错等,通过简单搜索,发现ace(https://github.com/ajaxorg/ace)这个项目,该项目通过JS实现了支持代码高亮的代码编辑器。

阅读ace的文档发现项目作者提供了打包好的版本ace-builds(https://github.com/ajaxorg/ace-builds/),我们可以直接使用。

通过git clone拉取ace-builds项目,然后将src中的所有代码文件都赋值front-end/lib中,这些就是不同编程语言对应着其中的文件。

fbb697ab520df93dc60f20113243053f.png

获取了ace后,我们还需要使用它,在ide.js中,我们写入如下代码:

let editor;window.onload = function() {// 载入aceeditor = ace.edit("editor");// 设置编辑器主题editor.setTheme("ace/theme/monokai");// 设置编辑器解析的编程语言editor.session.setMode("ace/mode/c_cpp");}// 选择不同编程语言时,需要切换ace的modefunction changeLanguage() {let language = $("#languages").val();if (language == 'c' || language == 'cpp') {editor.session.setMode("ace/mode/c_cpp");} else if (language == 'python'){editor.session.setMode("ace/mode/python");}else if (language == 'nodejs'){editor.session.setMode("ace/mode/javascript");};}// 用户写完代码,点击运行时,将代码通过Ajax发送至Python后端function runCode() {$.ajax({url: "/run_code",method: "POST",data: {language: $("#languages").val(),code: editor.getSession().getValue()},success: function(response) {console.log('success');console.log(response);$('.output').text(response);}})}

至此,前端就开发完了。

后端开发

后端我选择Flask来开发,非常快,直接基于Flask docs里提供的代码,复制粘贴,再修修改改则可,我们将代码写到back-end的serve.py中,代码如下:

import subprocess
import os
import time
from flask import Flask
from flask import render_template
from flask import requesttemplate_dir = os.path.abspath("../front-end")
static_folder = os.path.abspath("../front-end")
app = Flask(__name__, static_folder=static_folder, template_folder=template_dir)@app.route("/run_code",  methods=['GET', 'POST'])
def run_code():if request.method == 'POST':"""1.接收到前端信息2.将其存入文件中3.使用相关的解释器去执行文件中的代码4.将执行的结果返回给前端"""code = request.values.get('code')language = request.values.get('language')code_file_path = os.path.join(os.path.abspath('codes')) + str(time.time()) + '.code'with open(code_file_path, 'w') as f:f.write(code)if language == 'python':py_path = 'c:\\users\\admin\\appdata\\local\\programs\\python\\python38\\python.exe'process = subprocess.Popen([py_path, code_file_path],stdout=subprocess.PIPE,stderr=subprocess.PIPE)stdout, stderr = process.communicate()output = stdout + stderrelif language == 'nodejs':node_path = r'C:\Program Files\nodejs\node.exe'process = subprocess.Popen([node_path, code_file_path],stdout=subprocess.PIPE,stderr=subprocess.PIPE)stdout, stderr = process.communicate()output = stdout + stderrreturn outputelif request.method == 'GET':return render_template("ide.html", name="run code")if __name__ == "__main__":app.run(port=8001)

上述代码没啥难度,就是设置了一个run_code接口,如果是GET请求,则返回HTML页面(ide.html),如果是POST,则按编程语言的类型选择相应的解释器,去执行相应的代码。

通过Python的subprocess,利用shell的形式执行代码。

效果

运行项目,先用Python来实现斐波那契数列,效果如下:d7ec66e6ddd99be88dfefee3087bb14d.png

换成JavaScript来实现斐波那契数列,效果如下:

d6d8cbc22703ba3db9963f4fab0a38cd.png

结尾

哦豁,实现下来,比我想象的简单,整个直播的过程对我来说有点像限时编程,播完后,有点累,但感觉开发出来挺爽的。

Enjoy Code,我们下篇文章见。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql投票网站_ThinkPHP5+jQuery+MySql实现投票功能

这篇文章主要介绍了ThinkPHP5jQueryMySql实现投票功能&#xff0c;本文通过实例代码给大家介绍的非常详细&#xff0c;具有一定的参考借鉴价值,需要的朋友可以参考下ThinkPHP5jQueryMySql实现投票功能&#xff0c;先给大家展示下效果图&#xff0c;如果大家感觉效果不错&#x…

站点html标贴验证,SEO优化之详解百度站点验证

原标题&#xff1a;SEO优化之详解百度站点验证最近有不少SEO新手同学问&#xff0c;百度站点验证怎么搞?。SEO新手问这样的问题也不算奇怪。作为一名“SEO老司机”不懂得如何做百度站点验证&#xff0c;显然是说不过去的。今天就来跟大家聊聊关于“百度站点验证”的那点事。什…

php网站安全狗绕过,绕过网站安全狗拦截,上传Webshell技巧总结 | 附免杀PHP一句话...

原标题&#xff1a;绕过网站安全狗拦截&#xff0c;上传Webshell技巧总结 | 附免杀PHP一句话*本文原创作者&#xff1a;1_2&#xff0c;本文属FreeBuf原创奖励计划&#xff0c;未经许可禁止转载这篇文章我介绍一下我所知道的绕过网站安全狗上传WebShell的方法。思路是&#xff…

百度关键词抓取工具_SEO:想提升关键词排名?你还缺一份seo优化大全

文 | 公关之家 作者&#xff1a;Leon360kSEO工具是网站进行搜索引擎优化过程中提升工作效能与准确性的多种辅助程序。这些工具与优化者者的智慧若用于积极方向&#xff0c;将会为网站的优化提供较大的助力&#xff0c;尤其是使用先进算法的工具会为优化者们更准确的决策参考与指…

ngrok内网穿透映射使用与注册 让外网访问你的网站

一、ngrok安装&#xff0c;使用与注册 1、先打开ngrok注册页面www.ngrok.com&#xff0c;进入sign up 后&#xff0c;发现注册报错&#xff0c;无法正常注册&#xff1b; 2、我们再打开一个界面www.github.com&#xff0c;点击注册&#xff0c;这次可以成功&#xff0c;注意再…

大型网站架构之分布式消息队列

以下是消息队列以下的大纲&#xff0c;本文主要介绍消息队列概述&#xff0c;消息队列应用场景和消息中间件示例&#xff08;电商&#xff0c;日志系统&#xff09;。 本次分享大纲 消息队列概述消息队列应用场景消息中间件示例JMS消息服务常用消息队列参考&#xff08;推荐&a…

网站架构第一篇

Web发展历程 CS时代&#xff1a;富客户端方案。卖软件可以赚钱。 QQ&#xff0c;影音&#xff0c;游戏 Web 1.0时代&#xff1a;主要是单向信息的发布。互联网内容是由少数编辑人员定制的&#xff0c;用户只有看的权限 三大门户网站&#xff1a;新浪、网易、搜狐。 Web 2.0时代…

python 3 爬取某小说网站小说,注释详细

目标&#xff1a;每一个小说保存成一个txt文件 思路&#xff1a;获取每个小说地址&#xff08;图一&#xff09;&#xff0c;进入后获取每章节地址&#xff08;图二&#xff09;&#xff0c;然后进入获取该章节内容&#xff08;图三&#xff09;保存文件中。循环 效果图&#…

如何用自己电脑做服务器,绑定域名建一个个人网站

使用自己的电脑&#xff0c;下载一个tomcat服务器&#xff0c;并将域名解析到本机&#xff0c;这样就可以发布自己的网站了。不过&#xff0c;关机之后网站便登不上去了。这样做只是为了我们可以更好的开发调试自己的工程&#xff0c;网站上线之后可以让更多的朋友帮你找bug。这…

Android 学习论坛博客及网站推荐

一、博客推荐 1&#xff09;http://blog.csdn.net/android_tutor&#xff08;Android开发入门基础&#xff0c;高级进阶&#xff09; 2&#xff09;http://blog.csdn.net/hellogv&#xff08;入门与提高&#xff0c;很多例子值得学习&#xff09; 3&#xff09;http://www.c…

【2019.6.11可用】chrome提示“无法添加来自此网站的应用、扩展程序和应用脚本”的解决办法

目前亲测可行的方法有两种&#xff0c;个人推荐第一种。 第一种方法&#xff08;推荐&#xff09; 1、在chrome上右键&#xff0c;打开属性。 在目标里添加参数“ --enable-easy-off-store-extension-install”。注意--前加上一个空格 2、【重启浏览器&#xff01;】打开chr…

猪八戒学做网站之HTML5篇(2):编写网页的工具

一杯清茶还没有喝完&#xff0c;小朱告诉我&#xff0c;他的网页做完了&#xff0c;惊得我下巴都快掉了。 我张大着嘴巴来到小朱的电脑前&#xff0c;看到了他完成的网页&#xff0c;完成情况好像还不错。各位可以看一下&#xff0c;他的网页的完成效果&#xff1a; 说实话&…

猪八戒学做网站之HTML5篇(3):网页不是图片

一大早&#xff0c;被手机的闹铃吵醒。自从做了程序员之后&#xff0c;天天都感觉睡不醒。脑力劳动和体力劳动真不一样&#xff0c;体力劳动累了之后&#xff0c;睡一觉起来就什么事也没有了。而脑力劳动之后&#xff0c;怎么睡都睡不醒。说什么三十年前睡不醒&#xff0c;三十…

猪八戒学做网站之HTML5篇(5):Hello HTML

出了几天差&#xff0c;回来一看&#xff0c;猪八戒正在网上津津有味地看着什么呢。 猪八戒看见我回来了&#xff0c;马上站了起来&#xff1a;“师父&#xff0c;你回来啦&#xff01;”一边说还一边接过我的行李包。 我把行李包递给猪八戒后问他&#xff1a;“我不在的这几天…

猪八戒学做网站之HTML5篇(6):标签!标签!

“师父&#xff0c;你在看什么呢&#xff1f;” “《南京&#xff01;南京&#xff01;》。”我头也不回地回答道。 “那我应该看什么呢&#xff1f;”猪八戒又问。 “标签&#xff01;标签&#xff01;”我还是头也没回地回答道。 “啥&#xff1f;”猪八戒一下子没有明白过来…

在VS2008中创建自定义控件(一)创建网站项目和自定义控件项目

本文目的&#xff1a; 1、创建一个创建网站项目。 2、创建一个自定义控件项目。 下文目的&#xff1a; 1、创建一个自定义控件。 2、将自定义控件添加到工具箱中&#xff0c;以便调用。 这两篇博文的最终结果如下图所示。 首先声明&#xff0c;用户控件和自定义控件是不同…

python从网站抓取特定内容

背景 测试需要模拟浏览器的userAgent&#xff0c;从网站上找到一批 http://www.fynas.com/ua 分析 非常普通的table元素维护 约有8K多条&#xff0c;为防止中途中断导致数据丢失选择读取一页写一页&#xff0c;单个文件可能吃力&#xff0c;选择100页数据放入一个文件的方式…

网站集成第三方登录--QQ

网站平台集成第三方登录--QQ 注&#xff1a;仅适用于线上测试&#xff0c;不提供本地测试&#xff08;供新手参考&#xff09;第一步&#xff1a;1、 登陆QQ互联开放平台首页 http://connect.qq.com/ &#xff0c;注册开发者信息2、 选择菜单栏“管理中心”创建应用-网站3、 填…

网站集成第三方登录--sina

网站平台集成第三方登录--sina 注&#xff1a;仅适用于线上测试&#xff0c;不提供本地测试&#xff08;供新手参考&#xff09;第一步&#xff1a;1、 登陆新浪微博开放平台首页 http://open.weibo.com/ &#xff0c;登录后编辑开发者信息 及身份认证2、 开始创建应用 并将<…

iframe引入的网站不能全屏宽度有滚动条_程序猿进阶不能错过的最全前端性能优化秘籍(一)!...

很多人通常在完成了产品之后才会去考虑性能。把与性能相关的事情拖到项目的最后来做&#xff0c;所做的也不过是对服务器上的config文件进行一些微调、串联、优化以及部分特别小的调整。而现在&#xff0c;技术已经有了翻天覆地的变化。一个项目的性能是非常重要的&#xff0c;…