用Python写个在线Python的网站怎么样

简介: 用Python写个在线Python的网站怎么样

前几天,一个朋友提出了一个建议,如何用python写出python的解释器,我感觉这是一个很好的问题,于是就去看看,打算用python写一个试试,后来我发现一个事情,python里面的subprocess算是一个很有趣的东西,他可以解释python自己的代码,之后就有个想法了,尝试用subprocess去写一个在线运行python的网站。


那今天我们就来分享一下,如何使用python去写一个在线python吧!


首先,这个东西是结合python的flask框架来完成的。先介绍一下flask框架:


Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。然而,Flask保留了扩增的弹性,可以用Flask-extension加入这些功能:ORM、窗体验证工具、文件上传、各种开放式身份验证技术。


使用终端,运行命令提示符CMD,执行:

pip install Flask


在做我们的工作之前先来了解一下flask框架是怎样的一个运行机制吧:

首先创建一个flaskrun.py文件(先写个demo,后面在这个基础上改改,就可以作为网站后端的接口了)


640.jpg


每个函数的上面都有修饰器,这个就代表他的路由,比如说@app.route('/'),它就指定了,下面这个函数所在的地址是127.0.0.1:5000/(默认端口是5000,可以手动在run方法中修改)

这个文件运行首先我们在没设置app文件的情况下,需要先设置一下,并且开成调试模式,再去运行:

set FLASK_APP=flaskrun.py

set FLASK_DEBUG=1

flask run

run了之后,服务会起了,就会跳出这样的界面。

640.png


那我们现在就可以去访问路由了,现在我们想访问index方法,我们就输入路由:

640.png


如果我们想访问hello方法,这个时候我们就需要加上/hello的路由了:

640.png

这样我们就进入了/hello的方法了,每个方法对应一个路由,包含最后一个post也是一样:

640.png

下面我们还要介绍的是报错机制:

在路由或者访问数据不对的情况下,我们一般得不到正确的结果,这个时候我们就需要来看看flask对于错误是如何进行解释的了。


flask对于错误也有个修饰器,叫@app.errorhandler()  ,括号里面跟错误代码,例如,无法找到页面就可以这么写:@app.errorhandler(404)  


640.png

当然还有一些其他的错误,例如400,500,405等错误,我们都可以捕捉:


640.jpg


ok,flask介绍完毕,我们下面进入正轨了,用subprocess来写python了。创建一个文件叫:pyol.py


首先导入要用的包:

import os,sys,subprocess,tempfile,time  (敲代码的时候建议大家还是分开敲,连起来写虽然也支持,但是事实上是不规范的,建议分开写)


在这里我们还需要用到临时文件夹,这个文件夹我们在运行python的时候会用到。

TempFile = tempfile.mkdtemp(suffix='_test', prefix='python_')  
FileNum = int(time.time()*1000)



下面一点比较关键的是,我们需要用到sys模块里的executable方法来获取python编译器的位置(就是它,才能解读python代码),

EXEC=sys.executable


下面我们需要定义编码方式:

def decode(s):  
    try:  
        return s.decode('utf-8')  
    except UnicodeDecodeError:  
        return s.decode('gbk')


在默认情况下都是以utf-8的情况下进行编码。


下面我们需要将用户写进来的python代码写入文件:

def write_file(pyname, code):  
    fpath = os.path.join(TempFile, '%s.py' % pyname)  
    with open(fpath, 'w', encoding='utf-8') as f:  
        f.write(code)  
    print('file path: %s' % fpath)  
    return fpath


下面我们需要在在一个主函数中定义执行方法,我们此时就需要用到subprocess 的check_output方法返回子进程的输出结果(check_output 是 父进程等待子进程完成,返回子进程向标准输出的输出结果  )


outdata = decode(subprocess.check_output([EXEC, fpath], stderr=subprocess.STDOUT, timeout=5))

将返回结果输出:

r['output'] = outdata


最后退出程序并删除文件:

try:  
            os.remove(fpath)  
        except Exception as e: 
            exit(1)

但是实际上这个临时文件本身也会自动删除,这步其实也算是多余的。这样我们的python就写好了。下面只需要把它加入路由,把用户输入的数据以post的方式提交即可。



我们在flaskrun.py文件里导入以下模块:

from flask import Flask  
from flask import request  
from flask import Response  
import json  
import pyol


我们需要定义一个返回的头部:

def Response_headers(content):  
    resp = Response(content)  
    resp.headers['Access-Control-Allow-Origin'] = '*'  
    return resp



之后我们来写post请求的接口:

@app.route('/run',methods=['POST'])  
def run():  
    if request.method == 'POST' and request.form['code']:  
        code = request.form['code']  
        print(code)  
        jsondata = pyol.main(code)  
        return Response_headers(str(jsondata))


我们指定他的路由为/run,采用post的方式传递数据,调用刚刚写的主函数的执行代码,来执行用户传入的code,最后将执行结果返回给用户。


最后我们运行代码:

if __name__ == '__main__':  
    app.run(host='0.0.0.0',port=1234,debug=True)


最后完整加上优化后代码如下:

pyol.py

640.jpg

flaskrun.py


640.jpg


我们现在需要借助postman来看一下run的结果,首先我们先run一下代码

(flask run):

640.png

之后我们打开postman

640.jpg



瞬间就完成了。


之后我们只要写个前端,把这个接口给前端调就大功告成了!

相关文章
|
7月前
|
JavaScript 前端开发 API
Python和Vue:构建动态网站的最佳伙伴
【4月更文挑战第10天】在数字时代,Python和Vue.js成为构建互动性网站的理想组合。Python以其强大的后端处理和丰富的库(如Django和Flask)支持高效开发,而Vue.js则凭借其轻量级、数据驱动的前端框架提供直观界面。两者结合,实现前后端分离,双向数据绑定,高效API交互,以及高度灵活性和可扩展性。庞大的社区和生态系统为开发过程提供资源支持,优化用户体验。这种技术栈适合从简单的博客平台到复杂应用的各类项目,为企业带来竞争优势。
200 1
|
4月前
|
数据采集 存储 数据挖掘
【优秀python数据分析案例】基于Python书旗网小说网站数据采集与分析的设计与实现
本文介绍了一个基于Python的书旗网小说网站数据采集与分析系统,通过自动化爬虫收集小说数据,利用Pandas进行数据处理,并通过Matplotlib和Seaborn等库进行数据可视化,旨在揭示用户喜好和市场趋势,为图书出版行业提供决策支持。
380 6
【优秀python数据分析案例】基于Python书旗网小说网站数据采集与分析的设计与实现
|
3月前
|
数据采集 开发者 Python
Python之怎么爬取图片网站
Python之怎么爬取图片网站
|
3月前
|
Web App开发 存储 安全
Python编写脚本,打开浏览器输入网址,自动化登陆网站
Python编写脚本,打开浏览器输入网址,自动化登陆网站
166 4
|
2月前
|
Python
基于python-django的matlab护照识别网站系统
基于python-django的matlab护照识别网站系统
18 0
|
2月前
|
安全 Java Python
基于python-django的Java网站全站漏洞检测系统
基于python-django的Java网站全站漏洞检测系统
35 0
|
4月前
|
人工智能 数据可视化 程序员
精心整理自学python的宝藏网站,不看亏死
精心整理自学python的宝藏网站,不看亏死
163 4
精心整理自学python的宝藏网站,不看亏死
|
4月前
|
监控 数据可视化 数据挖掘
基于python flask茶叶网站数据大屏设计与实现,可以做期末课程设计或者毕业设计
本文介绍了一个基于Python Flask框架的茶叶网站数据大屏设计与实现项目,该项目集成了数据收集、处理、可视化展示、实时监控和交互操作等功能,适合作为课程设计或毕业设计,帮助学生提升数据分析和决策支持能力。
基于python flask茶叶网站数据大屏设计与实现,可以做期末课程设计或者毕业设计
|
4月前
|
数据采集 存储 JavaScript
基于Python 爬书旗网小说数据并可视化,通过js逆向对抗网站反爬,想爬啥就爬啥
本文介绍了如何使用Python编写网络爬虫程序爬取书旗网上的小说数据,并通过逆向工程对抗网站的反爬机制,最后对采集的数据进行可视化分析。
209 2
基于Python 爬书旗网小说数据并可视化,通过js逆向对抗网站反爬,想爬啥就爬啥
|
4月前
|
开发框架 Java 数据管理
我使用Python开发网站的3个主要框架库,强烈推荐
我使用Python开发网站的3个主要框架库,强烈推荐