Login, Login Page

Kategori: Python / Flask , 18 Eylül 2019 , JanFranco


Kullanıcı kayıt etmek için gerekli sayfayı oluşturduk, fonksiyonları yazdık. Şimdi aynı işlemleri kullanıcı girişi için yapacağız, oldukça benzer işlemler olacak. İlk olarak LoginForm adında bir sınıf açalım:


class LoginForm(Form):
    username = StringField("Username: ", validators=[validators.Length(min = 4, max = 25)])
    password = PasswordField("Password: ")
login.html adında bir dosya oluşturalım ve içeriğini şu şekilde ayarlayalım:


{% extends "layout.html" %}

{% block body %}
    {% from "includes/formhelpers.html" import render_field %}
    <h3>Login</h3>
    <hr>
    <form method = "post">
        {{ render_field(form.username, class = "form-control") }}
        {{ render_field(form.password, class = "form-control") }}
        <button type="submit" class="btn btn-primary">Login</button>
    </form>

{% endblock body %}
login() fonksiyonu oluşturalım:


@app.route("/login", methods=["GET", "POST"])
def login():
    form = LoginForm(request.form)
    if request.method == "POST":
        username = form.username.data
        password = form.password.data
        
        cursor = mysql.connection.cursor()
        query = "SELECT * FROM users WHERE username = %s"
        result = cursor.execute(query, (username,))

        if result > 0:
            data = cursor.fetchone()
            real_password = data["password"]
            if sha256_crypt.verify(password, real_password):
                flash("Successully logined!", category="success")
                return redirect(url_for("index"))
            else:
                flash("Wrong password, please try again!", category="danger")
                return redirect(url_for("login"))
        else:
            flash("Wrong username, please try again!", category="danger")
            return redirect(url_for("login"))

    return render_template("login.html", form = form)
İki türlü method mevcut, GET ve POST. Eğer kullanıcı /login sayfasına girerse bu GET işlemi olur. GET işleminde if bloğu çalışmaz ve direk login.html sayfası yüklenir. Kullanıcı giriş formunu doldurur ve giriş yap butonuna tıklarsa bu POST işlemi olur ve if bloğu çalışır. Blokta ilk olarak kullanıcı adı ve şifre formdan çekilir ve veritabanında kullanıcı adı sorgulanır. Eğer sonuçlar 0'dan büyük ise kullanıcı var demektir. Eğer yoksa hata mesajı verilir, sayfa yeniden yüklenir. Şifre kontrolü için formdaki şifre ile veritabanındaki şifre özel bir method ile karşılaştırılır. Eğer şifreler uyuşuyorsa başarıyı simgeleyen bir flash mesajı ile birlikte ana sayfaya yönlendirilir. Eğer uyuşmuyorsa hata mesajı ile birlikte sayfa yeniden yüklenir.


Sonraki Yazı: Session
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın