想要在web端某个按钮的js代码中,使用ajax来调用服务端的一个python脚本,从数据库取出数据并写入服务端的另一个html文件中,可以实现吗?
w3c上有这样的一个例子,不过是用的asp文件,而且只是操作了原来的html,(代码是response.write("<table>"))
所以想来问下可以用python来实现这一想法吗。。
用Flask很简单的:比如:
index.html 放到templates文件夹下:
<!DOCTYPE html>
<html lang="en">
<head>
<link href="http://libs.baidu.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="http://libs.baidu.com/bootstrap/3.0.3/js/bootstrap.min.js"></script>
<script type=text/javascript>
$(function() {
$('#calculate').click(function(){
$.ajax({
url: '/addnumber',
data:{
a: $('#a').val(),
b: $('#b').val()
},
dataType: 'JSON',
type: 'GET',
success: function(data){
$("#result").html(data.result);
}
});
});
});
</script>
</head>
<body>
<div class="container">
<div class="header">
<h3 class="text-muted">addNum</h3>
</div>
<hr/>
<div>
<p>
<input type="text" id='a' size="5" name="a"> +
<input type="text" id='b' size="5" name="b"> =
<span id="result">?</span>
<p><button class="btn btn-success" id="calculate">calculate</button>
</form>
</div>
</div>
</body>
</html>
python脚本run.py
:
from flask import Flask, render_template, request, jsonify
app = Flask(__name__)
@app.route('/')
@app.route('/index.html')
def index():
return render_template('index.html')
@app.route('/addnumber')
def add():
a = request.args.get('a', 0, type=float)
b = request.args.get('b', 0, type=float)
return jsonify(result=a + b)
if __name__ == "__main__":
app.run()
安装好了flask之后,直接python run.py即可
ajax就是发送了一个http请求到后台,后台要做的就是接收这个请求,处理并返回结果,用Python做个http服务器就好了,这方面有很好的框架,flask就不错你可以试试
JS
毕竟是前端逻辑,你可以通过AJAX
向后台发送一个请求,后台代码(譬如Java
)完成对Python
脚本的调用。
补充内容:
Http的原理就已经限定了浏览器和服务器通信的过程:
浏览器(客户端)向服务器发送一个请求,请求内容在所发送的“请求报文”中,Web服务器(Nginx、Apache等)接受到请求后,调用及转发请求内容到你的后台代码,后台代码进行逻辑处理后,通过Web服务器返回一个携带结果的Http“响应报文”,客户端接受后,对报文做相应处理,譬如浏览器会把收到的HTML文档解析成我们看到的样子。
AJAX
本质上也只是异步向服务端发送请求而已,真正在服务器上做处理的,依然是网站的后台代码,AJAX不能直接操作服务器上的东西
。
原理理解了,代码只是工具而已。
你用Flask,那么你有两种方法可以操作服务器上的文件:
1.直接把逻辑写在AJAX发送请求的URL所对应的后台代码中。
2.在后台逻辑中调用你服务器上的本地Python脚本,执行本地脚本的方法很多,我简单给你举几个:
import os
import commands
# import subprocess 这个用法忘记了……
file = os.popen('xxx.py') # 返回值是一个记录执行回显的文件
os.system('xxx.py') # 单执行,没有返回值
status, output = commands.getstatusoutput('xxx.py')
# 返回值2个,第一个是状态码,即命令是否执行成功;第二个是执行结果回显
调用你要调用的脚本就好了。