> For the complete documentation index, see [llms.txt](https://yavuzalikorkut.gitbook.io/flask/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yavuzalikorkut.gitbook.io/flask/flaskin-temel-yapilari-1/request-ve-response-doenguesue/uygulama-ve-istek-baglamlari.md).

# 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.

```python
from flask import request

@app.route('/')
def index():
    user_agent = request.headers.get('User-Agent')
    return '<p>Your browser is {}</p>'.format(user_agent)
```

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ı).*&#x20;

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 | <p>                                              g           <br>                                          </p> | 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&#x131;*(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.

> &#x20;\>>> **from hello import app**\
> &#x20;\>>> **from flask import current\_app**\
> &#x20;\>>> **current\_app.name**\
> &#x20;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.
