2015-01-14 14 views
6

adresinden erişebilirsiniz. HTTP çağrısının yanıtını vermeden önce istek nesnesine erişebilmek istiyorum.Flask - talebe after_request veya teardown_request

g.curr_request = request 

@app.after_request 
def after_request(response): 
    # get the request object somehow 
    do_something_based_on_the_request_endpoint(g.curr_request) 

Ama yukarıda görünüyor: Ben g isteği ekleyip böyle bir şey yapabileceği gördü

from flask import Flask 
... 
app = Flask(__name__, instance_relative_config=True) 
... 

@app.before_request 
def before_request(): 
    # do something 

@app.after_request 
def after_request(response): 
    # get the request object somehow 
    do_something_based_on_the_request_endpoint(request) 

@app.teardown_request 
def teardown_request(response): 
    # get the request object somehow 
    do_something_based_on_the_request_endpoint(request) 

: Ben "teardown_request" ve "after_request" üzerinden talep erişmek isteyen biraz garip. Eminim ki bu talebe ulaşmak için daha iyi bir yol var.

Teşekkür

+0

Sorunuzu biraz açıklığa kavuşturabilir misiniz: 1) İlgili içe aktarma ifadelerini ekleme 2) "Teardown_request" ve "after_request" yoluyla erişim istiyorum "ile ne demek istiyorsunuz?" – joostdevries

+0

@joostdevries - Soruyu düzenledim. Yanıtı göndermeden önce orijinal talebe dayanarak bazı işlemler yapmak istiyorum (benim durumumda, istek URL'sine dayanan db işlemleriyle ilgili bazı şeyleri halletmem gerekiyor ...), ancak nasıl erişeceğimi bilmiyorum. "after_request" ve "teardown_request" istekleri – Lin

+0

Talebin referansını tutmak için g'yi kullanmanın nesi yanlış, ya da belki daha iyisi, url ya da URL'nin ilgili kısmı? İstediğiniz şeyin tam tersini yapmak için önerilen desen verildiğinde (before_request() yöntemindeki cevabı değiştirin) g öğesini basit ve makul bir çözüm gibi görünün: http://flask.pocoo.org/docs/0.10/patterns/deferredcallbacks/ – bsa

cevap

9

çözüm basit - Ayrıca

from flask import request 

@app.after_request 
def after_request(response): 
    do_something_based_on_the_request_endpoint(request) 
+0

Bu threadafe mı? – EpicDavi

+0

Evet. İş parçacığı yerel depolama kullanır. –