4

しばらくの間、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 ではないと思います...そうですか? フラスコで同じ機能を持つ単純な関数をどのように実装しますか?

4

2 に答える 2

1

HTTP リクエストにはメモリがなく、互いに独立しています。これは、Python アプリが要求を受け取ると、何かを実行し、すぐに応答を送信して終了することを意味します。それが HTTP の性質です。

より多くのリクエストに耐えられる永続的なもの (番号など) が必要な場合は、次のものが必要です。

  • サーバー上の永続ストレージ。ファイル、データベース、またはFlaskの場合は単にメモリ内のオブジェクト(変数)にすることができます。
  • 個別のリクエスト間でユーザーを識別します。それが、セッション処理と Cookie の目的です。

非常に原始的な方法 (本番システムでは使用しないでください):

  • 永続ストレージ: でグローバル dict (と呼ばれるnum) を作成しますmain()
  • index():
    • ランダムなセッション識別子を作成します ( si)
    • 設定num[si] = 0
    • siクッキーとして送信
  • 適切inc_number()な_sinum[si]
于 2013-08-26T14:44:15.783 に答える