使用按钮和 javascript 在烧瓶中设置一个 python 变量
Set a python variable in flask with a button and javascript
我有一个简单的 Flask
应用程序,其中包含一个名为 variable
:
的变量
from flask import Flask, render_template
app = Flask(__name__)
variable = 100
@app.route('/', methods=['GET'])
@app.route('/index/', methods=['GET'])
def index():
return render_template('index.html', variable=variable)
def main():
app.run(debug=True, port=5000)
if __name__ == '__main__':
main()
index.html
文件如下:
variable = {{ variable }}
<button onclick="setVariable(101);">
set variable to 101
</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>
function setVariable(variable) {
console.log(`variable = ${variable}`);
}
</script>
有没有办法在setVariable
函数中设置变量值?即variable
的值在此设置为101例如。
基本上最终目标是使用按钮动态设置 variable
的值,这应该进一步更新 index.html
文件中的 variable = {{ variable }}
行。
编辑
以下暗示您不能这样做,必须使用 ajax 请求或类似的东西。
我认为您应该考虑使用 React
或 Vue
。或者请使用数据库
(MySQL
或 MongoDB
等) 存储持久化数据,并使用 ajax.
动态读取数据
另一个解决方案,使用像 meteor 或 nodejs 这样的 websocket 可能会很好。
您可以使用 Post/Redirect/Get。
使用 index.html
中的表格 post 值 app.py
中的 @app.route('/index/', methods=['GET', 'POST'])
表格在index.html
variable = {{ variable }}
<form action="{{ url_for('index') }}" method="post">
<input type="text" value="101" name="variable">
<input type="submit" value="set variable to 101">
</form>
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul>
{% for message in messages %}
<li style="color:red">{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
更改app.py
以处理表单
from flask import Flask, render_template, request, redirect, url_for, flash
app = Flask(__name__)
app.secret_key = b'_1#y2l"F4Q8z\n\xec]/'
variable = 100
@app.route('/', methods=['GET', 'POST'])
@app.route('/index/', methods=['GET', 'POST'])
def index():
global variable
if request.method == "POST":
try:
variable = int(request.form.get("variable"))
return redirect(url_for('index'))
except:
flash("Invalid type for variable")
return redirect(url_for('index'))
return render_template('index.html', variable=variable)
if __name__ == '__main__':
app.run(debug=True, port=5000)
将 app.secret_key = b'_1#y2l"F4Q8z\n\xec]/'
添加到 flash
如果用户尝试发送除数字以外的任何内容时的错误消息
我有一个简单的 Flask
应用程序,其中包含一个名为 variable
:
from flask import Flask, render_template
app = Flask(__name__)
variable = 100
@app.route('/', methods=['GET'])
@app.route('/index/', methods=['GET'])
def index():
return render_template('index.html', variable=variable)
def main():
app.run(debug=True, port=5000)
if __name__ == '__main__':
main()
index.html
文件如下:
variable = {{ variable }}
<button onclick="setVariable(101);">
set variable to 101
</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>
function setVariable(variable) {
console.log(`variable = ${variable}`);
}
</script>
有没有办法在setVariable
函数中设置变量值?即variable
的值在此设置为101例如。
基本上最终目标是使用按钮动态设置 variable
的值,这应该进一步更新 index.html
文件中的 variable = {{ variable }}
行。
编辑
以下暗示您不能这样做,必须使用 ajax 请求或类似的东西。
我认为您应该考虑使用 React
或 Vue
。或者请使用数据库
(MySQL
或 MongoDB
等) 存储持久化数据,并使用 ajax.
另一个解决方案,使用像 meteor 或 nodejs 这样的 websocket 可能会很好。
您可以使用 Post/Redirect/Get。
使用 index.html
中的表格 post 值 app.py
@app.route('/index/', methods=['GET', 'POST'])
表格在index.html
variable = {{ variable }}
<form action="{{ url_for('index') }}" method="post">
<input type="text" value="101" name="variable">
<input type="submit" value="set variable to 101">
</form>
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul>
{% for message in messages %}
<li style="color:red">{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
更改app.py
以处理表单
from flask import Flask, render_template, request, redirect, url_for, flash
app = Flask(__name__)
app.secret_key = b'_1#y2l"F4Q8z\n\xec]/'
variable = 100
@app.route('/', methods=['GET', 'POST'])
@app.route('/index/', methods=['GET', 'POST'])
def index():
global variable
if request.method == "POST":
try:
variable = int(request.form.get("variable"))
return redirect(url_for('index'))
except:
flash("Invalid type for variable")
return redirect(url_for('index'))
return render_template('index.html', variable=variable)
if __name__ == '__main__':
app.run(debug=True, port=5000)
将 app.secret_key = b'_1#y2l"F4Q8z\n\xec]/'
添加到 flash
如果用户尝试发送除数字以外的任何内容时的错误消息