2016-04-13 36 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