繁体   English   中英

ajax的python-flask示例

[英]python-flask example for ajax

有一段时间我正在尝试学习如何在Flask中使用Ajax。 在烧瓶的官方网站上有一个例子:

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')

它对我很有用。 但我正在寻找以下计划:

  1. jQuery代码将初始编号发送到python应用程序
  2. python应用程序存储数字并响应'收到:[数字]'
  3. 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 ......是吗? 如何在烧瓶中实现具有相同功能的简单功能?

我认为你缺少的是每次客户请求增加数量时都会有一个独立的请求。 您的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端记住用户会话中的号码。 对于这种类型的解决方案,Flask应用程序将具有两个视图功能:

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时发送它。

我希望这有帮助。

HTTP请求没有内存,它们彼此独立。 这意味着当您的Python应用程序收到请求时,它会执行某些操作,立即发送响应并退出。 这就是HTTP的本质。

如果你想要持久的(比如你的号码)更多的请求,你需要:

  • 服务器上的持久存储。 它可以是文件,数据库,或者在Flask中只是内存中的对象(变量)。
  • 识别不同请求之间的用户。 这就是会话处理和cookie的用途。

一种非常原始的方法(不应该用于生产系统):

  • 持久存储:在main()创建一个全局字典(称为num main()
  • index()
    • 创建随机会话标识符( si
    • set num[si] = 0
    • 发送si作为cookie
  • inc_number()使用来自cookie的si (由浏览器发回)来增加相应的num[si]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM