• Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Request nesnesi (http isteği)

 
#1

Flask uygulamamasına bir istek yapıldığında, flask bu view fonksiyonuna bir kaç nesne sunar. Bu view fonksiyonu bu nesneleri ihtiyaca göre kullanır. Request nesnesi bu birkaç nesneden biridir. Bu nesne gelen http isteğini içerir.
Flask ile request nesnesinin kullanımına bakalım:
Kod:
from flask import request

@app.route('/')
def index():
   username = request.args.get('username')
   password = request.args.get('password')
   return "<p>{0} - {1}</p>".format(username, password)

Request nesnesini kullanmak için flask modulundan 
Kod:
request

 sınıfı eklenir. Bu sınıf 

Kod:
args

 isminde bir sözlük(python veri tipi-dictionary) veri tipinde bir değişken bulundurur. Örneğimizde querystring parametresi tanımlayıp bu parametrelere değer atadık. ?'den sonra tanımlanıp değer atanılan querystring parametresidir. 

Kod:
request

 nesnesi ile bu değerlere erişiyoruz. Python'da sözlük veri tipi anahtar-değer ikilisi şeklinde tutulur. Sözlükten değer almak için burada 

Kod:
get()

 metodunu kullanıyoruz. Bu metot parametre olarak anahar değerini alır.

Tarayıcıda aşağıdaki adresi ve parameterleri girdikten sonra tarayıcı ekranında aşağıdaki çıktıyı göreceksiniz:
Kod:
localhost:5000/?username=metmirr&password=123

çıktı:

metmirr - 123

Request nesnesinin dahası:
Dikkat ederseniz, request nesnesini globalmış gibi kullandık ama aslında öyle değil. Çok thread'li web serverları düşündüğünüzde request nesnesi global olamaz, çünkü bu threadlar farklı request nesneleri üzerinde çalışırlar.(Aynı anda aynı nesne üzerinde birçok threadin çalışması bir çok problemi beraberinde getirir.) Bu threadler tek bir zaman aralığında farklı istemcilerden gelen farklı istekler üzerinde çalışırlar. Bundan dolayı her thread farklı bir request nesnesi görmek zorundadır.

Flask'da Context kavramı:
Flask bazı nesneleri geçici global yapmak için Contextleri kullanır. Flask bu Contextleri aktif ederek özel olan değişkenleri çakışmalar yaşamadan threadler tarafından erişilmesini sağlar.
Flask'da iki tür context vardır: Uygulama Context'i(application context) ve Request Contex'idir.
Kod:
Aşağıda Flask özel değişkenlerin hangi türden olduğu belirtildi:

Değişken ismi                   Context                         Açıklama
------------------------------------------------------------------------
current_app                 application context             aktif edilen uygulama instance'ı

g (bu değişken her istek    application context             bir request kontrol edilirken geçici
ile sıfırlanır)                                            
depolama için kullanılılan
nesnedir

request                     request context                 gelen http isteğini barındıran nesne

session                     request context                 kullanıcı oturumu, istekler arasında hatırlatma için kullanılan sözlüktür.

Son olarak eğer context kavramı aklınızda tam yer edinmediyse python ile bir örnek vermek istiyorum:
Kod:
with open('dosya_adi', 'r') as f:
   data = f.read()

Pythonda 
Kod:
with

 context manager(içerik yöneticisi) olarak geçer. Bizim örneğimizde dosya açma ve işlem bittikten sonra dosyanın kapatılması with bloğu tarafından yapılır. Daha fazla bilgi edinmek isterseniz python contextlib kütüphanesine bakabilirsiniz. Bu kütüphane python ile gelir. Örnek olarak StackOverFlowda bulduğum çok faydalı bir örneği paylaşmak istedim:

Kod:
from contextlib import contextmanager
import os

@contextmanager
def working_directory(path):
   current_dir = os.getcwd()
   os.chdir(path)
   try:
       yield
   finally:
       os.chdir(current_dir)

# şimdi with ile kullanalım:
with working_directory("data/stuff"):
   # data/stuff klasöründe işlerini yap
# şimdi klasör eski klasör oldu

Örnekte contextmanager dekorator'u kullanılarak bu fonksiyon bir context manager fonksiyonu yapılıyor. Bu fonksiyon içerisinde çalışılan klasör değiştiriliyor ve belirtilen klasörde işlemler yapıldıktan sonra 
Kod:
finally

 kısmında klasör eskisine çevriliyor.




Ara
Cevapla


[-]
Hızlı Cevap

İnsan Doğrulama:
Aşağıda görünen onay kutusunu işaretleyiniz. Bu işlem otomatik spam kayıtları önlemek için kullanılır.

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Response nesnesi (yapılan http isteğine cevap) efsane 0 1,420 30-05-2017, Saat: 16:04
Son Yorum: efsane
  rquest nesnesi devamı efsane 0 1,404 30-05-2017, Saat: 16:03
Son Yorum: efsane

Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


Konuyu Okuyanlar:
1 Ziyaretçi

   
Türkçe Çeviri: MCTR, Forum Yazılımı: MyBB, © 2002-2020 MyBB Group.  



Merih Forum® bilgi paylaşım platformu. 2015-2020 Tüm hakları saklıdır.