python - 使用 python / flask + ajax 动态更新 html 站点的问题
问题描述
我有一个带有文件 dropzone 的 python/flask 应用程序文件,
一旦上传了一个文件,我就会从另一个 py 文件启动一个函数。
现在我需要在网站上传文件时打印一个字符串
这是应用程序文件的一部分:
logger = None
@app.route('/',methods=['POST','GET'])
def upload():
if request.method == 'POST':
f = request.files.get('file')
f.save(os.path.join(app.config['UPLOADED_PATH'],f.filename))
es.main()
global logger
logger = "something here"
return render_template('index.html', logger=logger)
这是html文件:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script>
$(function(){
window.setInterval(funtion(),{
loadNewLogger()
}, 100)
function loadNewLogger(){
$.ajax({
url:"/",
type: "POST",
datatype: "text",
success: function(data){
$(update_logger).replaceWith(data)
}
});
}
});
</script>
<body>
<div style="color:rgb(0, 0, 0);text-align:center">
NAME </div>
{{ dropzone.create(action='upload') }}
{{ dropzone.load_js() }}
{{ dropzone.config() }}
<div id="update_logger">
{{ logger }}
</div>
问题是什么都没有发生。html 站点显示“无”,当它应该在上传文件后打印“这里的东西”时。那个代码有什么问题?
解决方案
问题是默认情况下您的路线接受GET
请求。因此,无论何时获取,它都会直接运行return render_template('index.html', logger=logger)
;但是你看这一次它没有访问权限logger = "something here"
。这意味着当有GET
请求时,该行永远不会被执行,因此值logger
stays None
。你可以做的是添加一个return logger
logger = None
@app.route('/',methods=['POST','GET'])
def upload():
if request.method == 'POST':
f = request.files.get('file')
f.save(os.path.join(app.config['UPLOADED_PATH'],f.filename))
es.main()
global logger
logger = "something here"
return logger
return render_template('index.html', logger=logger)
确保你导入url_for()
——from flask import url_for
推荐阅读
- mysql - 一个应用程序在heroku中有两个数据库
- scala - 为 Apache Spark 示例运行 Cypher (CAPS)
- ios - 检查 iOS 中后台的 Wi-Fi 网络变化,如 blynkmyplant iOS 应用程序
- c# - 如何使用 Moq 模拟 IMongoCollection.Find
- linux - Linux中多核处理器从实模式到保护模式的转换
- android - 是否可以在 Delphi for Android 中使用 TelecomManager?
- excel - Spark 连接到网络文件夹
- python - python中与grep -B等效的代码是什么?
- macos - 笔记软件推荐
- python - 仅在 seaborn 的最后一张图中显示的平均中值模式线