django restful 1-在线Python编辑器
客户端(浏览器)----> 前端页面-----> 后端处理数据,并把数据以 json 形式发送到前端
online_app.py
from django.conf import settings
from django.http import HttpResponse
from django.conf.urls import url
from django.views.decorators.http import require_POST # 目前的 API 视图只能用于接收 POST 请求
from django.http import JsonResponse # 用于返回 JSON 数据
import subprocess
from django.views.decorators.csrf import csrf_exempt setting = {
'DEBUG':True,
'ROOT_URLCONF':__name__
} settings.configure(**setting) # 主视图
def home(request):
# 浏览器与服务器的内容交互都是以二进制流的方式进行的,所以正规的响应就应返回字节串
with open('index.html','rb') as f:
html = f.read()
return HttpResponse(html) # 执行客户端代码核心函数
def run_code(code):
try:
output = subprocess.check_output(['python','-c',code],
universal_newlines=True,
stderr=subprocess.STDOUT,
timeout=30)
except subprocess.CalledProcessError as e:
output = e.output
except subprocess.TimeoutExpired as e:
output = '\r\n'.join(['Time Out!!!',e.output]) return output # API 请求视图
@csrf_exempt
@require_POST
def api(request):
code = request.POST.get('code')
output = run_code(code)
return JsonResponse(data={'output':output}) # URL 配置
urlpatterns = [url('^api/$',api,name='api'),
url('^$',home,name='home')] if __name__ == '__main__':
import sys
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
index.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>在线 Python 解释器</title>
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<style>
#run {
width: 20%; /*规定按钮的宽度*/
margin-top: 10px; /*留出和输入框的间距*/
}
#code {
font-size: 25px;
resize: none;
}
#output {
font-size: 25px;
resize: none;
}
</style>
</head>
<body><!--在下面的注释中 bs 代表 bootstrap -->
<div class="container"><!-- 页面的整体布局 -->
<div class="row"> <!-- 这一行单独用来放标题 -->
<div class="col-lg-12"> <!-- 根据 bs规定,所有内容应放在 col 中。这一列占满一行 -->
<p class="text-center h1"> <!-- text-center 是 bs 中央排版类,h1 是 bs 一号标题类 -->
在线 Python 解释器
</p>
</div>
</div>
<hr><!-- 标题和真正内容的分割线 -->
<div class="row"><!-- 这一行用来放置主要内容 -->
<div class="col-lg-6"><!-- 代码输入部分 -->
<p class="text-center h3">
在下面输入代码
</p>
<textarea id="code" placeholder="你的代码." class="form-control" ></textarea>
<div class='text-right'><button id="run" type="button" class="btn btn-primary ">运行</button></div>
</div>
<div class="col-lg-6"><!-- 结果显示部分 -->
<p class="text-center h3">运行结果</p>
<div class="col-lg-12"><textarea id="output" disabled placeholder="输入代码并点击运行按钮" class="text-center form-control"></textarea></div>
</div>
</div>
</div>
<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<script>
// 动态大小函数
function changeSize(ele){
$(ele).css({'height':'auto','overflow-y':'hidden'}).height(ele.scrollHeight)
}
// 应用到输入框
$('#code').each(function(){
this.oninput = function(){
changeSize(this)
}
})
function getCode(){
return $('#code').val()
}
//打印结果到输出框并改变输出框大小
function print(data){
var ele = document.getElementById('output')
output.value = data['output']
changeSize(output)
}
// 点击按钮发送代码
$('#run').click(function(){
$.ajax({
url:'/api/', //代码发送的地址
type:'POST', // 请求类型
data: {'code':getCode()},//调用代码获取函数,获得代码文本
dataType: 'json', //期望获取的响应类型为 json
success: print // 在请求成功之后调用 pprint 函数,将结果打印到输出框
})
})
</script>
</body>
</html>
结果:
django restful 1-在线Python编辑器的更多相关文章
- $Django 在线文本编辑器skindeditor
简介 KindEditor是一套开源的在线HTML编辑器,主要用于让用户在网站上获得所见即所得编辑效果,开发人员可以用 KindEditor 把传统的多行文本输入框(textarea)替换为可视化的富 ...
- python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...
- python编辑器对比和推荐
python编辑器对比和推荐 我先给一个初步的表格吧,大家如果有什么意见,或有补充,欢迎提出.有些我没有用过,先不写了.以下是我使用过的python IDE: 除了PythonWin, Visua ...
- Django+xadmin打造在线教育平台(二)
三.xadmin后台管理 3.1.xadmin的安装 django2.0的安装(源码安装方式): https://github.com/sshwsfc/xadmin/tree/django2 把zip ...
- Django+xadmin打造在线教育平台(三)
五.完成注册.找回密码和激活验证码功能 5.1.用户注册 register.html拷贝到templates目录 (1)users/views.py class RegisterView(View): ...
- Django+xadmin打造在线教育平台(一)
目录 在线教育平台(一) 在线教育平台(二) 在线教育平台(三) 在线教育平台(四) 在线教育平台(五) 在线教育平台(六) 在线教育平台(七) 在线教育平台( ...
- 4种好用的python编辑器
1.Sublime Text: 这是一个轻量级的代码编辑器,跨平台,支持几十种编程语言,包括Python,Java,C/C++等,小巧灵活,运行轻快,支持代码高亮.自动补全.语法提示,插件扩展丰富,是 ...
- Django RESTful Web Services, 此书学DRF不错
全名为<Django RESTful Web Services: The easiest way to build Python RESTful APIs and web services wi ...
- Js的在线代码编辑器:CodeMirror
github地址:https://github.com/codemirror/CodeMirror/tree/master/demo 里面包含需要的js.css文件以及大量的示例 官网:https:/ ...
随机推荐
- Javascript设计模式(1)
本文是学习了<JavaScript设计模式>(谢廷晟 译)做的学习笔记 一.JavaScript的灵活性 1. 普通 functon function startAnimation() { ...
- 《C#图解教程》 总览
初识本书是在知乎,许多网友推荐它作为 C# 入门书籍. 本书的最大特点是插图丰富,许多复杂的概念,一副插图就解释得通透明了. 本书另外一个隐藏特性是作者有着 C/C++ 经验,书中经常提到它们与 C# ...
- Css多列语法笔记
columns多列属性定义: column-width:规定列的宽度(此宽度是缩放scale以后的最小宽度): column-count:规定元素被分隔的列数: column-rule设置所有colu ...
- 通过smtp直接发送邮件
/// <param name="fromEmail">发件人的邮箱</param> /// <param name="toEmail&qu ...
- 【BZOJ2882】工艺(后缀自动机)
[BZOJ2882]工艺(后缀自动机) 题面 BZOJ权限题,良心洛谷 题解 还是一样的,先把串在后面接一遍 然后构建\(SAM\) 直接按照字典序输出\(n\)次就行了 #include<io ...
- 自言自语WEB前端面试题(二)
今天换道题,新鲜出炉的 var Model=function(){ this.name='lilei'; this.age=20; } Model.prototype.say=function(){ ...
- Spring Boot初探之restful服务发布
一.背景 Spring boot是集服务发布.数据库管理.日志管理等于一身的服务开发框架:是微服务开发的全能小帮手.这章讲述一下如何使用spring boot发布restful服务接口. 二.搭建基础 ...
- 将PPT文件内容转换为图片放在Email邮件正文中发送
通过Email推送统计报告.一般除了要求将PPT报告文件作为附件发给用户,同时希望将报告内容在邮件中直观展示. 一份统计报告中经常包含柱状图.饼图.好看的图表,这些信息要直接在Email中展示比较复杂 ...
- python多线程、多进程以及GIL
多线程 使用threading模块创建线程 传入一个函数 这种方式是最基本的,即调用threading中的Thread类的构造函数,然后指定参数target=func,再使用返回的Thread的实例调 ...
- jsp学习第一弹
早期动态网站开发技术主要使用cgi技术,cgi的基本原理是,将浏览器提交至web服务器的数据通过环境变量传递给其他外部程序,经外部程序处理后,再由cgi把处理结果传送给web服务器,最后由web服务器 ...