一段时间以来,我一直在尝试学习如何将 Ajax 与 Flask 结合使用。 flask官网上有一个例子:
from flask import Flask, jsonify, render_template, request
app = Flask(__name__)
@app.route('/_add_numbers')
def add_numbers():
a = request.args.get('a', 0, type=int)
b = request.args.get('b', 0, type=int)
return jsonify(result=a + b)
@app.route('/')
def index():
return render_template('index.html')
它对我很有效。但我正在寻找以下程序:
- jQuery 代码向 python 应用程序发送一个初始数字
- python 应用程序存储号码并响应“收到:[号码]”
while true:
python 应用程序等待请求“增加”,它会将数字加 1 并返回它
jQuery 部分没关系,我可以做到,但我不确定如何实现 python 部分:
@app.route('/_inc_number')
def inc_number():
n = request.args.get('n', 0, type=int)
while true:
req = request.args.get('req', 0, type=string)
if req == 'increase':
n = n + 1
return n #It exits the function. how respond without quit?
请解释一下如何恢复数据?我也是 Ajax 和 Flask 的新手,我怀疑它不是“真正的”ajax……对吗?您将如何在 Flask 中实现具有相同功能的简单函数?
最佳答案
我认为您缺少的是每次客户请求增加数量时都会有一个独立的请求。您的 inc_number
处理程序将编码如下:
@app.route('/_inc_number')
def inc_number():
n = request.args.get('n', 0, type=int)
n = n + 1
return n
然后在 jQuery 端,每次您想要增加数字时都必须调用一个独立的 Ajax 请求。
请注意,对于这种类型的解决方案,jQuery 应用程序会跟踪计数器的当前值,并且必须在每次请求时将其发送到 Flask。另一种可能性是让 Flask 端记住用户 session 中的数字。对于这种类型的解决方案,您的 Flask 应用程序将具有两个 View 函数:
from flask import session
# you need to set a SECRET_KEY in configuration, used to sign the user session
@app.route('/set_number')
def set_number():
# store n in the user session
session['n'] = request.args.get('n', 0, type=int)
@app.route('/inc_number')
def inc_number():
session['n'] = session['n'] + 1
return session['n']
有了这个解决方案,现在 jQuery 可以设置数字,而不必在每次调用 inc_number
时都发送它。
希望对您有所帮助。
关于ajax 的 python-flask 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18445347/