簡體   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