2012-08-12 16 views
6

Bir WSGI middleware kullanarak Flask'in before_request() ve/veya after_request() kullanımındaki farklılıkların tam olarak ne olduğunu oldukça kafa karıştırıcı buluyorum.flask: wsgi-middleware vs before_ ve after_request()

  • Her istek vücut kelime "pastırma" için taranmalıdır ve "yumurta" ile değiştirilmesi:

    böyle çok saçma bir şey yapmak istediğini farz edelim.
  • Şimdi istek, görüntüleme Fonksiyon Yanıt
  • Her yanıtı vücut "yumurta" için taranır ve "pastırma"

misiniz? Öğesinin ile değiştirilmesi gerekir oluşturur (url-haritalama göre) Şişe-view vurur WSGI ara yazılımı veya Flask işlevleri kullanıyorum? Django'dan çok sağlam bir middleware paketi ile gelen, fark bana açık değil.

Şimdiden teşekkürler. berni

cevap

8

Aslında Django'da tam olarak aynı seçeneğe sahipsiniz. Django, bir kısımda WSGI üzerine inşa edilmiştir, bu yüzden teorik olarak Django'da ara katman yazılımı veya Django ara katman yazılımı yazabilirsiniz. Kafanızın karışmamasının nedeni, Django topluluğunun tipik olarak geliştiricileri WSGI ara katman yazılımından uzak tutmasıdır. Bunun bir nedeni, Django'nun mod_python ve WSGI üzerinde eşit olarak çalışmak üzere tasarlandığından kaynaklanmaktadır. Django ara katmanını kullanarak, ara katman yazılımınız her iki sistemde de çalışır (bkz. this post by James Bennett).

WSGI ara katman yazılımı oluşturmanın bir avantajı, birden çok çerçevede kullanılabilmesidir. Örneğin, Beaker bir oturumdur ve herhangi bir WSGI çerçevesinde kullanılabilecek bir WSGI ara katmanını önbelleğe alır. Eğer özellikle Flask'ta yazılmışsa, Piramit geliştiricileri bunu kullanamazdı. Kütüphanenin bakıcısı özellikle kütüphanenin birden çok çerçevede çalışabilmesini sağladı, böylece bir WSGI kütüphanesi olarak yazdı.

  1. sadece uygulamanıza belirli bir işlem bir ara katman yazıyorsanız, sizin çerçevenin ortakatmanını:

    Temelde, bu benim kararı vereceğini nasıl.

  2. Aralığınızın uygulamanızın birkaçında yararlı olduğunu düşünüyorsanız ve diğer kişiler için faydalı olabileceğini düşünüyorsanız, çerçevenizin ara katmanını kullanmaya devam edin (Flask gerçekten "uzantı" olarak adlandırır). Örnek olarak Flask-SQLAlchemy'a bakın.
  3. Eğer insanlar ara katman yazılımınızla gerçekten ilgileniyorlarsa ve yardım etmeye istekliyse, bunu diğer çerçevelerde kullanabilmeleri için bir WSGI ara katman kütüphanesine dönüştürmeyi düşünün.
+0

harika cevap - teşekkürler mark! – bmaeser