Merhaba TurkHackTeam ailesi! Ben @an0un ve bugün sizlere ileri seviye bir kayıt sisteminin nasıl yapıldığını göstereceğim. Bunun için Google Firebase ve Python kullanacağız. Python'da ise flet ve firebase kütüphanelerini kullanacağız. Hadi hemen başlayalım.
Hemen Firebase'den başlayalım. Tarayıcımıza Google Firebase aratıyoruz ve gösterilen sayfalardan Firebase'i seçiyoruz veya BURAYA tıklayın. Girdiğimiz sitede karşımıza böyle bir sayfa çıkacak.

Go to console butonuna basıyoruz ve Google hesabımıza giriş yapıyoruz.

Ben daha önceden oluşturduğum için KayitSistemi adında bir projem var fakat siz Create a project butonuna basıyorsunuz. Bir isim belirliyorsunuz ve ileri ileri geçiyorsunuz.

Daha sonra gelen bu sayfada ise Choose or create bilmem ne kısmından Default Account for Firebase seçeneğini tıklıyoruz ve sonrasında Create Project diyip projemizi oluşturuyoruz. Bu arada takipte kalın yakın bir zamanda Firebase'in detaylı kullanımı hakkında bir konu oluşturabilirim.

Evet projemiz oluşturuldu. Sol tarafta bulunan Build sekmesine basıp aşağıdan 2. sırada olan Realtime Database'yi seçiyoruz. Buraya çok dikkat etmeniz lazım. Spoileri okumadan database'nizi oluşturmayın sakın. Açılan sayfadan Create Database butonuna basıyoruz ve bizden bir lokasyon isteyecek. İstediğinizi seçebilirsiniz fakat ben değiştirmeden Next tuşuna bastım. Burası çok önemli. Next'e bastıktan sonra gelen son aşamada bize test modunda mı yoksa kilitli modda mı olacağını soruyor. Burada kilitli mod seçilidir fakat biz bunu test moda çeviriyoruz. Çünkü database'mizi kilitli modda oluşturursak kodumuzdaki kayıt fonksiyonu çalışmaz. Yani database'mize 3. parti hiçbir şey ekleme yapamaz. Yalnız şuna da dikkat edin ki test modunda açtığınız zaman bize bir API URL verilecek. Bu URL'yi hiçbir yerde paylaşmayın. Bu URL başkalarının eline geçerse database'nize istediği gibi ekleme çıkarma yapabilirler. Burayı okuduğunuza göre işlemleri uygulayabilirsiniz. Enable dedik ve database'mizi oluşturduk. Karşımıza bir sayfa geldi.

Benim burada kırmızı ile karaladığım yerlerde bu paylaşmamamız gereken API URL mevcut. Firebase'deki işlemlerimiz bu kadardı. Şimdi Python kodumuza geçelim.
Python:
from firebase import firebase
import flet
from flet import Page, Text, ElevatedButton, TextField, Column
firebase = firebase.FirebaseApplication('API_URL',None)
def kayitsistemi(page: Page):
page.title = "Kayıt Sistemi"
def girisyap(e):
col.controls = [username, password, t1,onaylab1,geri]
col.update()
def kayitol(e):
col.controls = [username, password,passwordonayla, t1,onaylab2,geri]
col.update()
def onaylab1(e):
if username.value.strip() in firebase.get('',''):
oku = firebase.get(username.value.strip(), '')
deger = 0
for i, v in oku.items():
if password.value.strip() == v:
deger += 1
if username.value.strip() == v:
deger += 1
if deger == 2:
t1.value = 'Giriş Başarılı'
else:
t1.value = 'Kullanıcı Adı veya Şifre Hatalı'
else:
t1.value = 'Kullanıcı Adı Hatalı'
t1.update()
def onaylab2(e):
if username.value.strip() in firebase.get('',''):
t1.value = 'Böyle Bir Hesap Zaten Mevcut!'
else:
if password.value == passwordonayla.value:
data = {'username':username.value.strip(), 'password':password.value.strip()}
firebase.patch(username.value.strip(),data)
t1.value = 'Hesabınız Oluşturuldu! Lütfen Giriş Yapınız!'
else:
t1.value = 'Şifreler Uyuşmuyor. Tekrar Deneyiniz!'
t1.update()
def geri(e):
col.controls = [t1,b1,b2]
username.value = ""
password.value = ""
passwordonayla = ""
t1.value = ""
page.update()
username = TextField(label="Kullanıcı Adı", hint_text="Kullanıcı Adınızı Giriniz")
password = TextField(label="Şifre", hint_text="Şifrenizi Giriniz",password=True)
passwordonayla = TextField(label="Şifrenizi Onaylayın", hint_text="Şifrenizi Tekrar Giriniz", password=True)
t1 = Text(value="")
b1 = ElevatedButton(text="Giriş Yap",on_click=girisyap,width=page.width)
b2 = ElevatedButton(text="Kayıt Ol", on_click=kayitol, width=page.width)
onaylab1 = ElevatedButton(text="Onayla",on_click=onaylab1, width=page.width)
onaylab2 = ElevatedButton(text="Onayla",on_click=onaylab2, width=page.width)
geri = ElevatedButton(text="Geri",on_click=geri, width=page.width)
col = Column(controls=[t1,b1,b2],width=page.width,height=page.height,alignment="center", horizontal_alignment="center")
page.controls.append(col)
page.update()
flet.app(target=kayitsistemi)
Python:
from firebase import firebase
import flet
from flet import Page, Text, ElevatedButton, TextField, Column
firebase = firebase.FirebaseApplication('API_URL',None)
Python:
def kayitsistemi(page: Page):
page.title = "Kayıt Sistemi"
def girisyap(e):
col.controls = [username, password, t1,onaylab1,geri]
col.update()
def kayitol(e):
col.controls = [username, password,passwordonayla, t1,onaylab2,geri]
col.update()
def onaylab1(e):
if username.value.strip() in firebase.get('',''):
oku = firebase.get(username.value.strip(), '')
deger = 0
for i, v in oku.items():
if password.value.strip() == v:
deger += 1
if username.value.strip() == v:
deger += 1
if deger == 2:
t1.value = 'Giriş Başarılı'
else:
t1.value = 'Kullanıcı Adı veya Şifre Hatalı'
else:
t1.value = 'Kullanıcı Adı Hatalı'
t1.update()
def onaylab2(e):
if username.value.strip() in firebase.get('',''):
t1.value = 'Böyle Bir Hesap Zaten Mevcut!'
else:
if password.value == passwordonayla.value:
data = {'username':username.value.strip(), 'password':password.value.strip()}
firebase.patch(username.value.strip(),data)
t1.value = 'Hesabınız Oluşturuldu! Lütfen Giriş Yapınız!'
else:
t1.value = 'Şifreler Uyuşmuyor. Tekrar Deneyiniz!'
t1.update()
deger diye bir değişken oluşturup değerini 0 (sıfır) yapıyoruz. i ve v değişkenlerini oku.items()'in içinde döndürüyoruz. Burada i bizim anahtarımızı, v ise değerimizi temsil ediyor. Bunu bir dictionary veri tipi olarak düşünebilirsiniz. Eğer kullanıcının girdiği şifre veri tabanımızda varsa deger değişkenini 1 artırıyor ve kullanıcının girdiği kullanıcı adı da varsa 1 kez daha artırıyor ve deger değişkenimiz 2 oluyor. deger değişkenimiz 2 olursa bir Label'e Giriş Başarılı! yazdırıyoruz. Eğer değilse yani 2 olamamışsa (1 olsa bile hatalıdır) kullanıcı adı veya şifre hatalı demektir. Bir hata mesajı yazmasını sağladık. Şimdi onaylab2(e) fonksiyonumuza gelelim. Şunu da belirteyim ki fonksiyonlarımızın parametreleri için neden e kullandığımız hakkında bir fikrim yok ama kullanmazsak hata alıyoruz. Bilen varsa söylesin lütfen bilgilenelim. Bu fonksiyon da kullanıcının kayıt olmasını sağlayan bir fonksiyondur. İlk önce kullanıcının girdiği kullanıcı adının veri tabanımızda olup olmadığına baktık. Eğer varsa Label'imize Böyle Bir Hesap Zaten Mevcut! yazdırdık. Değilse yani böyle bir kullanıcı veri tabanımızda kayıtlı değilse kayıt olma işlemlerini başlattık. BURADAN DEVAM EDECEĞİZ. Bunu genel kodun sonlarında göreceksiniz fakat şimdi kafanız karışmasın diye belirtmek istiyorum. Bizim 3 tane TextBox'umuz (flet'te TextField olarak geçiyor), 1 tane Label'imiz ve 5 tane Buton'umuz var (ElevatedButton olarak geçiyor). 3 TextBox'umuzun içeriği:
- username = Kullanıcı Adının Yazıldığı TextBox (TextField) - Kayıt ve Giriş işlemlerinde kullanılır.
- password = Şifrenin Yazıldığı TextBox (TextField) - Kayıt ve Giriş işlemlerinde kullanılır.
- passwordonayla = Şifrenin Tekrar Yazıldığı TextBox (TextField) - Sadece Kayıt işleminde kullanılır.
Şimdi Label'imize geçelim. Label değişkenimizin adı t1'dir. Her türlü durum mesajlarını bu Label'i kullanarak kullanıcıya iletiriz. Şimdi ElevatedButton'larımıza geçelim.
- b1 = Giriş yapma ara yüzüne bağlanır. Bunu araçları gizleyerek yapar col değişkeni ile. Sadece menüde görünür.
- b2 = Kayıt olma ara yüzüne bağlanır. Bunu araçları gizleyerek yapar col değişkeni ile. Sadece menüde görünür.
- onaylab1 = Giriş yapılırken bilgiler doldurulduysa buna basılır ve giriş işlemi gerçekleşir. Label'i durum mesajına göre ayarlar. Sadece Giriş yapma ara yüzünde görünür.
- onaylab2 = Kayıt olunurken bilgiler doldurulduysa buna basılır ve kayıt işlemi gerçekleşir. Label'i durum mesajına göre ayarlar. Sadece Kayıt olma ara yüzünde görünür.
- geri = Hangi ara yüzde olduğu farketmez. Basılırsa menüye geri döndürür. Sadece Kayıt olma ve Giriş yapma ara yüzlerinde görünür.
Evet bunları da anlattığımıza göre onaylab2(e) fonksiyonumuzdan devam edebiliriz. Nerede kaldığımıza yukarıda ki BÜYÜK, parlak sarı metni bularak ulaşabilirsiniz. dictionary veri tipinde bir data adında değişken oluşturduk. 1. anahtarımıza 'username' adını, 2. anahtarımıza 'password' adını verdik. 1. değerimizi username.value.strip() olarak ve 2. değerimizi ise password.value.strip() olarak ayarladık. Daha sonra firebase.patch() kodunu kullanarak data dğeğişkenimizi veri tabanımıza işledik. firebase.post() kodu ile veri tabanımıza verilerimizi işleyebiliriz fakat burada firebase.patch() kullandık. Hemen bunun sebebini açıklıyorum. Şimdi biz firebase.post() kullansanydık kullanıcı adımız olan başlığımızın altında değişik bir key ortaya çıkıyor. Kullanıcı adı ve şifremiz bu key'in altında oluşuyor. Bu key rastgele olduğu için yapabileceğimiz bir şey kalmıyor. Fakat firebase.patch() kodu bunu yapmıyor. Direkt olarak kullanıcı adımız olan başlığımızın altında oluşturuyor data'mızı. İşte bu yüzden firebase.patch() kullandık. Şimdi koda devam edelim. firebase.patch(username.value.strip(),data) kullanırken parantez (yay ayraç) içerisindeki username.value.strip() değerimiz yani 1. parametremiz bu veriyi veri tabanımızda nereye kaydedeceğimizi belirliyor. Biz de bunu kullanıcının girdiği kullanıcı adı olarak ayarladık. data değişkenini kullandığımız 2. parametre ise veri tabanımıza ne ekleyeceğimizi belirliyor. Oluşturduktan sonra Label'imize bir durum mesajı gönderdik. Eğer password ile passwordonayla TextBox'larındaki değerler uyuşmuyorsa Label'imize şifrelerin uyuşmadığına dair bir durum mesajı gönderdik. En karmaşık 2. yer bitti. Gerisi kolay.
Bu kodumuzda ise col değişkenimizi ayarlıyoruz. Burada bunu ayarlamakta ki amacımız menü ara yüzüne dönmek. Bu yüzden ara yüzde sadece t1 Label'in, b1 ElevatedButton'un ve b2 ElevatedButton'un kalmasını sağladık. Daha sonra username, password ve passwordonayla TextField'lerimizi (TextBox) ve t1 Label'i temizledik. En sonda ise ara yüzü güncelledik.
Bu kodlar çok basit. Hemen hızlıca anlatıyorum. username, password ve passwordonayla değişkenlerimize kayıtlı TextField'ler (TextBox) oluşturduk. Bunların başlıklarını label= ile ayarladık. TextField'in (TextBox) içinde görünmesini istediğimiz gizli yazıları ise (değere etkisi yoktur) hint_text= ile ayarladık. t1 değişkenimize kayıtlı Label'imizi oluşturduk. Metnini value= ile ayarladık. Şimdilik hiçbir şey yazmasını istemediğimizden sadece metin alanımızı oluşturduk. (Çift tırnak falan koyduk işte.) 5 tane ElevatedButton oluşturduk ve text= ile metinlerini ayarladık. on_click= ile tıklandığında hangi fonksiyonu çalıştırması gerektiğini ayarladık. Buraya dikkat edin ki on_click parametresine yazdığımız fonksiyon isimlerinin sonunda her zaman ki gibi parantez (yay ayraç) kullanmıyoruz. Hata alırsınız. Daha sonra genişliğini sayfa genişliği olarak ayarladık. col Değişkenimiz önemli. col adında bir değişken oluşturduk ve burada Column() kullandık. Yani satır oluşturduk. controls= ile içinde bulunacak araçları ayarladık ve genişliğini, yüksekliğini sayfanınkilere göre ayarladık. Nerede olacağını falan merkez olarak belirttik 'center' ile. Sayfanın araçlarına col değişkenini ekledik ve sayfayı güncelledik. flet.app(target=kayitsistemi) kullanarak flet uygulamamızı kayitsistemi fonksiyonumuz olarak belirledik.
GitHub Linkine Buradan Ulaşabilirsiniz: Tıklayın. https://github.com/an00un/KayitSistemi
Evet! Sonunda Bitirdik. Ben @an0un ve Bugün Sizlere Python ve Google Firebase Kullanarak Nasıl Kayıt Sistemi Yapabileceğinizi Gösterdim. Faydalı Olduysa Ne Mutlu Bana. Hepinize İyi Günler Dilerim. Başka Bir Konuda Görüşmek Üzere, Hoşçakalın!
(Belirli sistem hatalarından dolayı konu tekrar oluşturulmuştur)
Python:
def geri(e):
col.controls = [t1,b1,b2]
username.value = ""
password.value = ""
passwordonayla = ""
t1.value = ""
page.update()
Bu kodumuzda ise col değişkenimizi ayarlıyoruz. Burada bunu ayarlamakta ki amacımız menü ara yüzüne dönmek. Bu yüzden ara yüzde sadece t1 Label'in, b1 ElevatedButton'un ve b2 ElevatedButton'un kalmasını sağladık. Daha sonra username, password ve passwordonayla TextField'lerimizi (TextBox) ve t1 Label'i temizledik. En sonda ise ara yüzü güncelledik.
Python:
username = TextField(label="Kullanıcı Adı", hint_text="Kullanıcı Adınızı Giriniz")
password = TextField(label="Şifre", hint_text="Şifrenizi Giriniz",password=True)
passwordonayla = TextField(label="Şifrenizi Onaylayın", hint_text="Şifrenizi Tekrar Giriniz", password=True)
t1 = Text(value="")
b1 = ElevatedButton(text="Giriş Yap",on_click=girisyap,width=page.width)
b2 = ElevatedButton(text="Kayıt Ol", on_click=kayitol, width=page.width)
onaylab1 = ElevatedButton(text="Onayla",on_click=onaylab1, width=page.width)
onaylab2 = ElevatedButton(text="Onayla",on_click=onaylab2, width=page.width)
geri = ElevatedButton(text="Geri",on_click=geri, width=page.width)
col = Column(controls=[t1,b1,b2],width=page.width,height=page.height,alignment="center", horizontal_alignment="center")
page.controls.append(col)
page.update()
flet.app(target=kayitsistemi)
GitHub Linkine Buradan Ulaşabilirsiniz: Tıklayın. https://github.com/an00un/KayitSistemi
Evet! Sonunda Bitirdik. Ben @an0un ve Bugün Sizlere Python ve Google Firebase Kullanarak Nasıl Kayıt Sistemi Yapabileceğinizi Gösterdim. Faydalı Olduysa Ne Mutlu Bana. Hepinize İyi Günler Dilerim. Başka Bir Konuda Görüşmek Üzere, Hoşçakalın!
(Belirli sistem hatalarından dolayı konu tekrar oluşturulmuştur)
