Merih Forum
rquest nesnesi devamı - Yazdırılabilir Sürüm

+- Merih Forum (https://merihforum.com)
+-- Forum: Programlama ve yazılım algoritmalar (https://merihforum.com/forum-programlama-ve-yazilim-algoritmalar)
+--- Forum: programlama (https://merihforum.com/forum-programlama)
+---- Forum: python (https://merihforum.com/forum-python)
+----- Forum: Flask (https://merihforum.com/forum-flask)
+----- Konu: rquest nesnesi devamı (/konu-rquest-nesnesi-devami.html)



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 
Kod:
hello.py

 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'

  1. hello.py dosyamızdan app ismindeki flask uygulama instance'ımızı import ediyoruz.

  2. flask kütüphanesinden current_app, uygulama context'sidir. Olan uygulama instance'ı tutar.

  3. Uygulama ismine erişiyoruz, ancak aktif olan context'de herhangi bir uygulama olmadığından hata alıyoruz.

  4. uygulama instance'ı olan ve import ettiğimiz app uygulamasının contextini alıyoruz.

  5. uygulama contextini aktif ediyoruz.

  6. artık bir uygulama contextine sahip olduğumuzdan uygulama ismine erişebiliriz. Uygulama ismi bizim modulun adıdır.
Şimdi 
Kod:
app.add_url_rule()

 fonksiyonundan bahsetmek istiyorum. Bu fonksiyon decore edilmiş 

Kod:
@app.route()

 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.