2016-04-13 7 views
1

Verwendung von add_url_rule schlägt fehl, aber @ app.route ('') funktioniert gut.Python Flask: Route vs add_url_rule, SSE

Hallo, ich versuche SSE (Server Sent Events) zu einer Python Flask App hinzuzufügen. Leider verwendet die App SOMEOBJECT.app.add_url_rule, um Routen zu verwalten, daher funktioniert die Verwendung der Dekoratoren in diesem Fall nicht für mich.

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

'Traceback (zuletzt letzter Aufruf): ... Datei" /Library/Python/2.7/site-packages/flask/ctx.py ", Zeile 251, in __init__ blueprint = self.request.blueprint Datei "/Library/Python/2.7/site-packages/flask/wrappers.py", Zeile 97, in Blueprint wenn self.url_rule und '.' in self.url_rule.endpoint: TypeError: Argument des Typs 'Funktion' ist nicht iterierbar – thomas

Antwort

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)  

die Dokumentation Siehe unten, die korrekte Syntax ist:

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

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

+0

Vielen Dank, ich habe diesen Teil des Dokuments nicht verstanden:/ – thomas

+0

Kein Problem. Ich habe auch etwas gelernt :) – wgwz