• 0 Oy - 0 Ortalama
  • 1
  • 2
  • 3
  • 4
  • 5
web formları session redirect

 
#1

flask-wtf eklentisi ile web form tanımlamayı görmüştük. Şimdi bu formdan veri nasıl alırız ona bakalım.
Kod:
#hello.py
from flask import Flask, render_template, redirect
from flask_bootstrap import Bootstrap
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired

app = Flask(__name__)

bootstrap = Bootstrap(app)

class NameForm(FlaskForm):
   name = StringField("Enter your name", validators=[DataRequired()])
   submit = SubmitField("Submit")

@app.route('/', methods=['GET', 'POST'])
def index():
   form = NameForm()
   if form.validate_on_submit():
       name = form.name.data
       print(name)
       return redirect(url_for('index'))
   render_template('index.html', form=form)


#index.html
{% import 'bootstrap/wtf.html' as wtf %}
{{wtf.quick_form(form)}}

Form elemanlarından post edilen veriyi almak için:
Kod:
form_ismi.alan_ismi.data

şeklinde erişilir. Örnekte yeni gördüğünüz 
Kod:
validate_on_submit()

 metodu 

Kod:
FlaskForm

 sınıfının metodudur. Bu metot validatorlar aracılığıyla bir alana girilen verinin geçerli olup olmadığını kontrol eder. Eğer metot True dönerse 

Kod:
if

 bloğuna girip name alanına girilen datayı alıyoruz.

redirect(): bu fonksiyon parametre olarak aldığı adrese yönlendirme yapar. Örneğimizde form gönderildikten sonra tekrardan kendi üzerinde dönderiyoruz. 
Kod:
url_for()

fonksiyonuna parametre olara 

Kod:
index

 view fonksiyonunu verdik. Bu view fonksiyonundan 

Kod:
url_for()

 bir url oluşturur ve 

Kod:
redirect

 fonksiyonu bunu kullanır.

Sayfa yeniden kendi üzerinde yenilendiğinden veriler uçup gider. Bu form verilerini veritabanına veya 
Kod:
session

'a eklemeliyiz ki url'ler arasında gezindiğimizde veriler hatırlansın. Session kullanarak 

Kod:
form.name.data

 değerini kaydedelim:

Kod:
from flask import session

...

@app.route('/', methods=['GET', 'POST'])
def index():
   form = NameForm()
   session["name"] = "anonymous"
   if form.validate_on_submit():
       session["name"] = form.name.data
       redirect(url_for('user'))
   return render_template('index.html', form=form, name=session.get("name")


@app.route('/user')
def user():
   name = session.get("name")
   return name

Form post edildiğinde 
Kod:
session["name"]

 değeri 

Kod:
name

 alanındaki değerle dolacaktır. Eğer form gönderilmezse 

Kod:
session["name"] = "anonymous"

 olarak kalacaktır. Form'u göndermeden tarayıcıdan localhost:5000/user adresine kendiniz giderseniz "anonymous" yazısını görürsünüz. Form post edildikten sonra user sayfasına yönlendirme yapılıyor. Artık name değeri post verisindeki name değeri olacaktır. Sessionda saklanan veriler tüm view fonksiyonları tarafında görünürdür.


Not:
Bir form post edildiğinde eğer bu post işleminden sonra sayfa başka bir yere veya sayfanın kendisi yenilenmezse tarayıcıyı yenilediğizde yeniden gönderilsin diye bir uyarı çıkacaktır. İleride veritabanına veri eklerken iki kez ekleme sorunuyla karşılaşabilirsiniz. Bunun için en iyi yöndem her post işleminden sonra sayfayı bir yere yönlendirin veya yenileyin: post/redirect/get tasarımı(pattern) olarak geçer.



Bul
Alıntı


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-2024 MyBB Group.  



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