GET, POST, Register Page

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


Bir web sitesinde gezinen bir kullanıcının yaptığı iki ana işlem vardır. Birincisi sayfa bilgilerini istemek, görüntülemek yani GET, diğeri ise sayfaya bilgi göndermek, veri aktarmak yani POST. Örneğin bir kayıt sayfasına girdik, bilgilerimizi yazıp kayıt ol butonuna bastık. Burada POST işlemi yapmış oluruz.

Bu önemli bilgiyi kavradıktan sonra ana dosyamızda register adında bir fonksiyon tanımlayalım. Fonksiyonunu iki özelliği olacağından methods parametresi ile bunu belirtmek zorundayız:


@app.route("/register", methods = ["GET", "POST"])
def register():
    form = RegisterForm(request.form)
    if request.method == "POST" and form.validate():
	    return redirect(url_for("index"))
    else:
        return render_template("register.html", form = form)
Burada eğer kullanıcı /register sayfasında GET işlemi yapmış yani sadece sayfaya girmiş ise else bloğu çalışacak ve register.html sayfası yüklenecek. Eğer kullanıcı POST işlemi yapmış ve form'da herhangi bir sıkıntı yok ise ana sayfaya yönlendirilecek. Temel işlemleri hallettik. Şimdi templates klasöründe register.html sayfasını oluşturalım:


{% extends "layout.html" %}
{% from "includes/form_helpers.html" import render_field %}

{% block body %}
    <h3>Register</h3>
    <hr>
    <form method = "post">
        {{ render_field(form.name, class = "form-control") }}
        {{ render_field(form.username, class = "form-control") }}
        {{ render_field(form.email, class = "form-control") }}
        {{ render_field(form.password, class = "form-control") }}
        {{ render_field(form.confirm, class = "form-control") }}
        <button type="submit" class="btn btn-primary">Register</button>
    </form>

{% endblock body %}
Formdan aldığımı bilgileri veritabanına kaydetmemiz için register() fonksiyonunu güncelleyelim. İlk olarak gerekli fonksiyonları import edelim:


from passlib.hash import sha256_crypt
from flask import Flask, render_template, flash, redirect, url_for, session, logging, request
passlib kütüphanesini şifre güvenliği için kullanacağız. Eğer kütüphane elimizde yoksa pip komutu ile indirebiliriz:


pip install passlib
Son olarak register() fonksiyonunu güncelleyelim:


@app.route("/register", methods = ["GET", "POST"])
def register():
    form = RegisterForm(request.form)
    if request.method == "POST" and form.validate():
        name = form.name.data
        username = form.username.data
        password = sha256_crypt.encrypt(form.password.data)
        email = form.email.data

        cursor = mysql.connection.cursor()
        query = "INSERT INTO users (name, email, username, password) VALUES (%s, %s, %s, %s)"
        cursor.execute(query, (name, email, username, password))
        mysql.connection.commit()
        cursor.close()

        return redirect(url_for("index"))
    else:
        return render_template("register.html", form=form)
/register sayfasına girip formu doğru biçimde doldurup register butonuna tıkladığımızda, veritabanına bilgilerimizin yazıldığını görüyoruz.


Sonraki Yazı: Flash Messages
Yorumlar

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