项目简介:制作一个网页版的摘要提取器,这个摘要提取器可以接收一篇文章,提取这篇文章的第一句和最后一句,然后拼在一起作为摘要在网页上输出。这里使用了Ajax进行数据传输。这个Ajax非常精炼,几行代码搞定。效果如下:
在输入框中粘贴一篇文章,点击提取,然后会输出这篇文章的摘要。摘要是由这篇文章的第一句话和最后一句话拼接而成。
项目的结构是一个index.html模板文件,放在templates文件夹下。一个app.py,放在和templates文件夹同级路径下,还有一个process.py,放在和app.py同级路径下。
app.py文件如下:
from flask import Flask, render_template, request, json
from process import fila #这个process是自己写的,保存成py文件,与本文件放在同一个文件夹下。
app = Flask(__name__)
@app.route('/')
def index():
return render_template("index.html")
#这个是用来实现ajax的
@app.route('/send_message/', methods=['POST']) #采用POST方式传输数据
def send_message():
message_get = request.form.get('message')#因为是POST方法传输,所以用request.form.get(),如果是GET方法传输,就是request.args.get()
ret = {'result': fila(message_get)} #构建json对象
return json.dumps(ret) #把json对象ret序列化为字符串用于传输
if __name__ == '__main__':
app.run(debug=True)
index.html文件如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hebron</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<link rel="stylesheet" href="/static/css/bootstrap.min.css">
<link rel="stylesheet" href="/static/css/style.css">
</head>
<body>
<div class="container">
<br>
<h1>Hebron摘要提取器</h1>
<br>
<div>
<input id="send" type="button" value="开始提取">
</div>
<br>
<div class="row">
<div class="col-md-8">
<label for="send_content">原文:</label><br>
<textarea id="send_content" style="width: 100%; height: 400px ;overflow: auto;word-break: break-all; resize: none;" name="send_content"></textarea>
</div>
<div class="col-md-4">
<label for="recv_content">摘要:</label><br>
<textarea id="recv_content" style="width: 100%; height: 400px ;overflow: auto;word-break: break-all; resize: none;" name="recv_content"></textarea>
</div>
</div>
</div>
<div>
</div>
<script src="/static/js/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
$("#send").click(function () {
var message = $("#send_content").val()
$.ajax({
url:"/send_message/",
type:"POST",
data:{
message:message
},
dataType: "json",
success: function(data) {
$("#recv_content").val(data.result);
}
})
})
</script>
</body>
</html>
JS代码块是执行Ajax的核心,首先找到按钮的id,定义单击时触发这里的匿名函数。匿名函数中,先定义了一个变量message,用来获取并存储textarea里的值,然后是ajax的参数,URL就是flask的route的URL值,type是post,对应flask里的post方法,data是传给flask的数据,这里冒号后面的message就是在JS代码块最开始定义的那个变量message,冒号前面的message是要传给flask的变量名。dataType的意思是从flask接收来的数据的格式,这里指定的是json,所以flask把数据传过来就不用进行json化了,直接使用即可。success的意思是如果ajax成功了,该做什么事。这里让它在另一个textarea中显示flask传过来的文本。传过来的data是在flask里构造的json对象,它有一个属性是result,里面存入的值是经过process文件处理过的文本。
process.py文件如下:
import re
def fila(chuan):
lili = re.split('。|!|;|?', chuan)
return lili[0] + '。' + lili[-2]
process.py里就一个函数,用来提取第一句和最后一句,很简单,只有两行代码。