rquest nesnesi devamı - efsane - 30-05-2017
Flask, bir istek aldığında uygulama context'ini ve request nesnesini aktif eder. İstek işlendikten sonra bu nesneler tekrardan silinir.
Örnek olarak aşağıdakilere bakalım:
Kod: #hello.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Merhaba"
şimdi yukaridaki
dosyasını kullanalım:
Kod: 1 > from hello import app
2 > from flask import current_app
>
3 > current_app.name
RuntimeError: Working outside of application context.
4 > app_ctx = app.app_context()
5 > app_ctx.push()
6 > current_app.name
'hello'
- hello.py dosyamızdan app ismindeki flask uygulama instance'ımızı import ediyoruz.
- flask kütüphanesinden current_app, uygulama context'sidir. Olan uygulama instance'ı tutar.
- Uygulama ismine erişiyoruz, ancak aktif olan context'de herhangi bir uygulama olmadığından hata alıyoruz.
- uygulama instance'ı olan ve import ettiğimiz app uygulamasının contextini alıyoruz.
- uygulama contextini aktif ediyoruz.
- artık bir uygulama contextine sahip olduğumuzdan uygulama ismine erişebiliriz. Uygulama ismi bizim modulun adıdır.
Şimdi
fonksiyonundan bahsetmek istiyorum. Bu fonksiyon decore edilmiş
fonksiyonu ile aynı işi yapar:
Kod: > from flask import Flask
> app = Flask(__name__)
> app_ctx = app.app_context()
> app_ctx.push()
>
1 > app.url_map
Map([<Rule '/static/<filename>' (GET, OPTIONS, HEAD) -> static>])
>
2 > def user():
... return "user page"
>
3 > app.add_url_rule('/user', user())
>
4 > app.url_map
<Rule '/user' (GET, OPTIONS, HEAD) -> user page>,
<Rule '/static/<filename>' (GET, OPTIONS, HEAD) -> static>])
Yukarıda python yorumlayıcısında bir uygulama oluşturup, bu uygulamaya url ekledim.- url_map: uygulamanın sahip olduğu bütün url'leri ve bu url'lerle ilişkili olan view fonkiyonların geri dönüş değerlerini gösterir.
- add_url_rule(): bu fonksiyon istek yapılacak olan url'i ve bu url'le ilişkili olacak olan fonksiyonu tanımlamaya yarar.
Son olarak request ile ilgili bahsetmek istediğim bir konu var:
Servera bir istek gittiğinde, flask bu istek gelmeden hemen önce ve sonra yapılmak istenen işlemler için dekoratorlar sunar:- before_first_request: uygulamaya ilk istek öncesinde çalıştırılmak istenen kod için kullanılır.
@app.before_first_requestdef do_something(): # buraya yapılacak işlemler
- before_request: bir fonksiyonu, kod parcasını her istekten önce çalıştırır
@app.before_requestdef before_request(): #connect_to_database()
- after_request: her istek sonunda çalışacak olan fonksiyon için kullanılır, kullanımı diğerleriyle aynıdır.
- teardown_request: her istekten sonra bir fonksiyonu çalıştırmak için kullanılır.
|