2016-04-13 76 views
1

使用add_url_rule失敗,但@ app.route('')正常工作。Python燒瓶:Route vs add_url_rule,SSE

你好,我想添加SSE(服務器發送事件)到Python Flask應用程序。不幸的是,該應用使用SOMEOBJECT.app.add_url_rule來管理路由,所以在這種情況下使用裝飾器不適用於我。

from flask import Flask, Response 
import random 
import time 

app = Flask(__name__) 
def eventStream(): 
    # will send simple SSE style responses 
    while True: 
     waittt = random.random() 
     time.sleep(waittt) 
     yield "data: {}\n\n".format(str(waittt)) 
# This route works fine :) 
@app.route("/streamroute") 
def stream(): 
    return Response(eventStream(), mimetype="text/event-stream") 

# This route doesn't work :(
app.add_url_rule("/stream", stream) 
app.run(debug=True) 

OK curl http://localhost:5000/streamroute

KO curl http://localhost:5000/stream

+0

'回溯(最近呼叫最後): ... 文件「/Library/Python/2.7/site-packages/flask/ctx.py」,第251行,在__init__中 blueprint = self.request.blueprint File 「/Library/Python/2.7/site-packages/flask/wrappers.py」,第97行,藍圖 如果self.url_rule和'。' in self.url_rule.endpoint: TypeError:類型'function'的參數是不可迭代的 – thomas

回答

2
from flask import Flask, Response            
import random                 
import time                  

app = Flask(__name__)               
def eventStream():                
    # will send simple SSE style responses          
    while True:                 
     waittt = random.random()            
     time.sleep(waittt)              
     yield "data: {}\n\n".format(str(waittt))        
# This route works fine :)              
@app.route('/streamroute')              
def stream():                 
    return Response(eventStream(), mimetype="text/event-stream")    

# This route doesn't work :(             
app.add_url_rule('/stream', 'stream', stream)         
app.run(debug=True)  

請參見下面的文檔中,正確的語法是:

app.add_url_rule('/stream', 'stream', stream)   

更多:http://flask.pocoo.org/docs/0.10/api/#flask.Flask.add_url_rule

+0

非常感謝,我不明白那部分文檔:/ – thomas

+0

沒問題。我也學到了一些東西:) – wgwz