Merih Forum Programlama ve yazılım algoritmalar programlama python Flask web formlar ile çalışma (flask-wtf eklentisi)

  • 0 Oy - 0 Ortalama
  • 1
  • 2
  • 3
  • 4
  • 5
web formlar ile çalışma (flask-wtf eklentisi)

 
#1

Web formları, server'a toplu olarak veri göndermek için kullanılırlar. Örnek olarak html etiketi olan form etiketine bakalım:
Kod:
#user.html
<form action="/user" method="post">
   Username: <input type="text" name="username">
   Password: <input type="password" name="password">
   <input type="submit" value="Submit">
</form>


from flask import request

...

@app.route('/user', methods=['GET', 'POST'])
def user():
   if request.method == 'POST':
       username = request.form.get('username')
       password = request.form.get('password')
       print(username, password)
   return render_template('user.html')

Yukardaki örneğimizde 
Kod:
index.html

 sayfasında bir form elemanı tanımladık bu form elemanın metodunu post olarak belirledik ki 

Kod:
Submit

 butonuna tıklandığında belgiler action özelliğindeki url'e gönderilecekler. 

Kod:
user()

 ismindeki view fonksiyonu eğer metot 

Kod:
POST

 ise 

Kod:
request

 nesnesi üzerinden form elemanının değerlerine erişiyoruz. 

Kod:
request.form.get('username')

 bu kullanımda 

Kod:
get()

 metodunun parametresi input etiketlerinin name özelliğinin değeridir. Yani html etiketlerine name özelliği ile erişiyoruz.

view fonksiyonuna 
Kod:
methods=['GET', 'POST']

 eklenmesi bu view fonksiyonunun bu iki metodu da desteklediği anlamına gelir. Eğer 

Kod:
POST

 metodunu eklemeseydik Method not allowed hatası alırdık. Flask view fonksiyonları varsayılan olarak 

Kod:
GET

 metodunu desteklerler.

Bu şekilde html form elemanlarıyla uğraşmak hem zahmetli bir iştir ve güvenlik sorunlarını da beraberinde getirir.
Cross-Site Request Forgery (CSRF):
Bir güvenlik sorunudur; tarayıcılar parolalarımızı, email adreslerimizi, şifrelerimizi çereklerde(cookie) şifrelenmiş halde saklarlar. Bu yüzden oturumumu açık bırak seçeneği çerezler tarafından kontrol edilir. Belirli bir sayfa için saklanmış olan bu bilgiler o sayfaya her istek yapıldığında bu çerezlerle birlikte gönderilir. Eğer bu sayfaya istek başka bir uygulama tarafında o sayfaya yapılırsa (3. parti bir site tarafından), bu kişiler kullanıcının bilgilerini sosyal mühendislikle elde edebilirler.
CSRF'den korunma:
Her server'a istek yapıldığında csrf tokenları değiştirilir ve bu token çerezlerde kaydedilir. Form verisi gönderilirken bu token da gönderilir. Giden verideki token ile serverdaki token değerlerinin aynı olup olmadığı kontrol edilir. Bu güvenlik sorunu için flask'ın bir önlemi yoktur. Çünkü flask herhangi bir form validasyon framework'üne sahip değildir. Ancak flask-wtf isimli form eklentisi bu ihtiyacı karşılar.
Flask-WTF eklentisini yüklemek için:
Kod:
$ pip install flask-wtf

flask-wtf eklentisi csrf güvenlik sorunu için formlara token ekler. Bu tokenı oluşturmak için flask uygulamasının 
Kod:
config

 özelliğine 

Kod:
SECRET_KEY

 isminde bir anahtar eklenmelidir:

Kod:
app.config["SECRET_KEY"] = "gizli değer buraya yazılır."

#veya

app.config.update(SECRET_KEY="gizli değer...")

config: Flask uygulama instancı'nın özelliğidir(attribute). Bu attribu python list(liste veri yapısı) sınıfından türetilmiştir.



Bul
Alıntı


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  Flask ile örnek bir uygulama altyapısı efsane 1 2,665 30-05-2017, Saat: 18:14
Son Mesaj: dalaylama
  database migration, Flask-migrate eklentisi efsane 0 1,967 30-05-2017, Saat: 17:21
Son Mesaj: efsane
  Flask-sqlalchemy ile tablo oluşturma, tablolar arasında ilişki tanımlama efsane 0 2,200 30-05-2017, Saat: 17:19
Son Mesaj: efsane
  Flask-sqlalchemy eklentisi, sütun veri tipleri efsane 0 1,942 30-05-2017, Saat: 17:18
Son Mesaj: efsane
  flask uygulamasına veritabanı ekleme sqlalchemy, orm efsane 0 2,316 30-05-2017, Saat: 17:16
Son Mesaj: efsane

Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


Bu konuyu görüntüleyen kullanıcı(lar):
1 Ziyaretçi

   
Türkçe Çeviri: Emre KRMN, Kodlayanlar MyBB, © 2002-2022 MyBB Group.  



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