Application and Request Contexts
Uygulama ve İstek Bağlamları
Flask bir istemciden bir istek aldığında, çalışacak view fonksiyonuna uygun şekilde nesneleri kullanılabilir hale getirmelidir. İstemci tarafından gönderilen HTTP isteğini içeren istek nesnesi gibi.
Flask'ın view fonksiyonuna bir istek nesnesiyle erişim sağlayabilmesinin yolu view fonksiyonuna parametre göndermesiyle olacaktır. Ancak bu, uygulamadaki her bir view fonksiyonuna fazladan bir parametreye sahip olmasına neden olur. Eğer bunu düşünürsek işler dahada karmaşıklaşır çünkü istek nesnesi, bir işlevi yerine getirmek için view fonksiyonlarının erişmesi gereken tek nesne değildir. Flask bağlamları (contextleri) kullanarak, view fonksiyonlarının bu gibi birçok parametre ile karmaşıklığını önlemek için belirli nesneleri global ve geçici olarak erişilebilir hale getirmektedir. Bu bağlamlar sayesinde view fonksiyonları şu şekilde yazılabilir.
Bu view fonksiyonunda, isteğin bir global değişkenmiş gibi kullanıldığına dikkat edelim. Aslında, istek global bir değişken olamaz; aynı anda farklı istemcilerden gelen farklı isteklerde multithread bir sunucuda birkaç thread çalışıyor olabilir, bu nedenle her bir threadin istekte farklı bir nesne görmesi gerekir. -thread(bir processin aynı anda birden fazla işi yapması için oluşturulan kod parçası).
Flask'ta iki bağlam (context) vardır. Uygulama bağlamı (Application Context) ve istek bağlamı (Request Context). Bu bağlamların ilişkilendirildiği değişkenler şu şekildedir.
Context | Değişken Adı | Görevi |
Application Context | current_app | Aktif uygulamalar için uygulama nesnesi |
Application Context | g | Bir isteğin ele alınması sırasında sırasında uygulamanın geçici depolama için kullanabileceği bir nesne. Bu değişken, her istekle birlikte sıfırlanır. |
Request Context | request | Client tarafından gönderilen bir HTTP isteğinin içeriğini kapsülleyen (içine alan) istek nesnesi. |
Request Context | session | Kullanıcı oturumu, uygulamanın istekler arasında “hatırlanan” değerleri saklamak için kullanabileceği bir sözlüktür. |
Flask uygulamayı etkinleştirir ve uygulama için istek göndermeden önce bağlamları (contextleri) ister, istek /* kullanıldıktan?(handled-çalıştırıldıktan?) */ sonra bunları kaldırır. Uygulama bağlamı(application context) aktarıldığında, current_app ve g değişkenleri thread için kullanılabilir hale gelir. Aynı şekilde istek bağlamı(request contexti) aktarıldığında request ve session durumu da kullanılabilir hale gelir. Bu değişkenlerden birine aktif bir uygulama veya istek bağlamı olmadan erişilirse, hata oluşur.
>>> from hello import app >>> from flask import current_app >>> current_app.name Traceback (most recent call last): ... RuntimeError: working outside of application context >>> app_ctx = app.app_context() >>>app_ctx.push() >>>current_app.name 'hello' >>>app_ctx.pop()
Yukarıda kod örneğinde gözüktüğü gibi, hiçbir uygulama bağlamı(application context) aktif olmadığında current_app.name
hata verir ancak uygulama için bir uygulama bağlamı aktarıldıktan sonra geçerli olur. Burada, uygulama bağlamının uygulama nesnesinden app.app_context()
i çağırarak nasıl elde edildiğine dikkat edelim.
Last updated