Bir önceki yazıda Flask kullanımına giriş yapmıştım, şimdi birkaç özellik daha ekleyerek devam edeceğim.
Son olarak dosyamız şu haldeydi. Ve aşağıdaki 3 satır komutu komut satırına yazarak sunucumuzu başlatmıştık. Ubuntu için set yerine export komutunu kullanmamız gerekiyor.
set FLASK_APP=C:\dosya\main.py set FLASK_DEBUG=1 flask run
from flask import Flask, request,redirect, url_for app = Flask(__name__) @app.route("/", methods=["GET", "POST"]) def merhaba(): if request.method == 'POST': sifre = request.form["sifre"] if sifre == "123": return "Şifre doğru içeriği görebilirsiniz." else: return redirect(url_for('giris')) else: return redirect(url_for('giris')) @app.route('/giris') def giris(): return ''''''
İlk iş olarak bir template kullanarak formumuzu ve giriş sayfamızı daha moduler hale getirelim hem de Python ve HTML kodlarımız birbirinden ayırmış olalım.
Flask içerisinde template kullanmak için oluşturduğumuz html dosyalarını, ana python dosyamızla(main.py) aynı klasörde bulunan bir template klasörü oluşturarak bunun içine atmamız gerekiyor.
Aşağıdaki kodları giris.html adıyla templates klasörü içerisine kaydediyoruz. Burada normal formumuzun yanında, dinamik bir değerin template’e aktarılışını gösterebilmek için, {{ tarih }} satırını ekledik. Bu, Jinja2 motorunda değişkenlerin gösterilme şeklidir.
Giriş Sayfası {{ tarih }}
Daha sonra bu template dosyamızı kullanabilmek için giris fonksiyonumuzu aşağıdaki şekilde değiştirip render_template modülünü ekliyoruz, kullandığımız render_template fonksiyonuna ilk parametre olarak teplate dosyamızın adını, daha sonra ise template içinde kullandığımız değişkenleri anahtar kelime adıyla veriyoruz. Burada bir söz dizisi(string) gönderdik diğer Python veri tipleri de kullanılabilir.
from flask import Flask, request,redirect, url_for, render_template from datetime import datetime # # # @app.route('/giris') def giris(): tarih = datetime.now().strftime('%Y-%m-%d %H:%M:%S') return render_template("giris.html", tarih=tarih)
Dosyalarımızı kayıt ettikten sonra tarayıcıda hata görmememiz gerekli. Aynısını icerik.html olarak merhaba fonksiyonu için de uyguluyoruz.
Giriş yapıldıktan sonra bunu bir cookie olarak tutmayı deneyelim. Bunun için merhaba fonksiyonumuzu aşağıdaki gibi değiştiriyoruz.
from flask import Flask, request,redirect, url_for, render_template, make_response # # @app.route("/", methods=["GET", "POST"]) def merhaba(): giris_yapildi = request.cookies.get('giris_yapildi') if giris_yapildi is not None: return render_template("icerik.html") if request.method == 'POST': sifre = request.form["sifre"] if sifre == "123": icerik_response = make_response(render_template("icerik.html")) icerik_response.set_cookie('giris_yapildi', '1') return icerik_response else: return redirect(url_for('giris')) else: return redirect(url_for('giris'))
Normalde bir fonksiyonun URL ile yapılan isteğe cevap verebilmesi için bir response nesnesi döndürmesi gerekir. Önceki örneklerde söz dizisi ya da render_template nesnesi döndürdüğümüzde Flask bunu response nesnesine dönüştürüyordu. Şimdi cookie eklememiz gerektiği için response nesnesini kendimiz oluşturmalıyız. make_response ile bunu yapıyor sonra set_cookie ile çerezimiz için anahtar değer ikilisini veriyoruz. Her istek geldiğinde eğer bu çerezimiz var ise direk içerik dosyamızı gösteriyoruz.
Bir cevap yazın