2011-11-15 12 views
8

Bu basit uygulama, iki teardown_request işleyicileri vardır ve bunlardan ikisi, her istek için çağrılacak beklediğiniz olursa olsun Ancak, zaman documentationGörünüm görünümünde yalnızca bir Flask teardown_request işlevi çağrılıyor Neden Özel Durum mu?

import flask 
import werkzeug.exceptions 

app = flask.Flask(__name__) 

@app.teardown_request 
def teardown1(response): 
    print "Teardown 1" 
    return response 

@app.teardown_request 
def teardown2(response): 
    print "Teardown 2" 
    return response 

@app.route("/") 
def index(): 
    return "chunky bacon" 

@app.route("/httpexception") 
def httpexception(): 
    raise werkzeug.exceptions.BadRequest("no bacon?") 

@app.route("/exception") 
def exception(): 
    raise Exception("bacoff") 

if __name__ == "__main__": 
    app.run(port=5000) 

uyarınca, görünüm uygulamasında ne ben

 
Teardown 2 
Teardown 1 
127.0.0.1 - - [15/Nov/2011 18:53:16] "GET/HTTP/1.1" 200 - 

Teardown 2 
Teardown 1 
127.0.0.1 - - [15/Nov/2011 18:53:27] "GET /httpexception HTTP/1.1" 400 - 

Teardown 2 
127.0.0.1 - - [15/Nov/2011 18:53:33] "GET /exception HTTP/1.1" 500 - 

Sadece teardown_request işlevlerinden biri werkzeug.exceptions.HTTPException elde edilmez bir istisna geçen görünümü tarafından yükseltildiğinde çağrıldığını: çalıştırmak ve sırayla üç görünümlere istekte, ben şu çıktıyı olsun. Herhangi bir fikir neden, ya da bu balonun içinde bir hata mı?

cevap

20

Sadece cevabı kendim keşfettim.

teardown_request işlevlerinin bir yanıt almaması ve after_request yolunda bir yanıt döndürmesi beklenmemektedir. Görünüşe göre ExceptionHttpException 'dan türeyen bir None olan bir argüman görünüm tarafından yükseltilir, bu durumda onlar tarafından geçirilir.

Görünüşe göre onlar da belirtilen istisnayı döndürmemeli veya gösterdiğim bozuk davranışı alırsınız.

 
Teardown 2 None 
Teardown 1 None 
127.0.0.1 - - [15/Nov/2011 19:20:03] "GET/HTTP/1.1" 200 - 

Teardown 2 None 
Teardown 1 None 
127.0.0.1 - - [15/Nov/2011 19:20:10] "GET /httpexception HTTP/1.1" 400 - 

Teardown 2 Exception('bacoff',) 
Teardown 1 Exception('bacoff',) 
127.0.0.1 - - [15/Nov/2011 19:20:18] "GET /exception HTTP/1.1" 500 - 

(bazı ekstra hata ayıklama eklenmesi ile: Sonra üç görünümde de beklenen çıkışını verir

@app.teardown_request 
def teardown1(exc): 
    print "Teardown 1 {0!r}".format(exc) 

@app.teardown_request 
def teardown2(exc): 
    print "Teardown 2 {0!r}".format(exc) 

:

uygulamanın teardown_request fonksiyonları aşağıdaki gibi görünmelidir, düzeltmek için

+3

+1 - ne yazdığınızı yazdırabilirsiniz. –

İlgili konular