Updating, Deleting Articles

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


Kullanıcı paneli oluştururken sil ve güncelle butonlarını da oluşturmuştuk. Şimdi bu işlemler için fonksiyonlar oluşturalım:


@app.route("/delete/<string:id>")
def delete(id):
    cursor = mysql.connection.cursor()
    query = "SELECT * FROM articles WHERE author = %s AND id = %s"
    result = cursor.execute(query, (session["username"], id))

    if result > 0:
        query2 = "DELETE FROM articles WHERE id = %s"
        cursor.execute(query2, (id,))
        mysql.connection.commit()
        return redirect(url_for("dashboard"))
    else:
        flash("Error!", category="danger")
        return redirect(url_for("dashboard"))
Dinamik bir url tanımladık. İlk olarak kullanıcı adı ve id kullanılarak bir kontrol yapılıyor. Eğer sonuç dönerse DELETE sorgusu çalışıyor. Eğer sonuç dönmezse (yazı yoktur veya yazı ile kullanıcı adı uyuşmuyordur) kullanıcı paneli bir hata mesajı ile return ediliyor. Güncelleme için de fonksiyon oluşturalım:


@app.route("/edit/<string:id>", methods = ["GET", "POST"])
def edit(id):
    if request.method == "GET":
        cursor = mysql.connection.cursor()
        query = "SELECT * FROM articles WHERE author = %s AND id = %s"
        result = cursor.execute(query, (session["username"], id))
        
        if result > 0:
            article = cursor.fetchone()
            form = ArticleForm()

            form.title.data = article["title"]
            form.content.data = article["content"]
            return render_template("update.html", form = form)
        else:
            flash("Error!", category="danger")
            return redirect(url_for("dashboard"))
    else:
        form = ArticleForm(request.form)

        newTitle = form.title.data
        newContent = form.content.data

        cursor = mysql.connection.cursor()
        query = "UPDATE articles SET title = %s, content = %s WHERE id = %s"
        cursor.execute(query, (newTitle, newContent, id))
        mysql.connection.commit()

        flash("Successfully updated!", category="success")
        return redirect(url_for("dashboard"))
GET ve POST olmak üzere iki methodumuz var ve if - else yapısı ile bunu kontrol ettik. Eğer method GET ise update sayfası yüklenecek. Update sayfasındaki başlık, content gibi bilgiler, orjinal yazının verileri ile doldurulacak. Eğer method POST ise formdaki bilgiler çekilecek ve yazı UPDATE SET komutu ile güncellenecek. update.html dosyası oluşturalım:


{% extends "layout.html" %}

{% block body %}
    {% from "includes/formhelpers.html" import render_field %}
    <h3>Update</h3>
    <hr>
    <form method = "post">
        {{ render_field(form.title, class = "form-control") }}
        {{ render_field(form.content, class = "form-control", rows = 17, cols = 50) }}
        <button type="submit" class="btn btn-primary" style="float: right;">Update</button>
    </form>
{% endblock body %}


Sonraki Yazı: Searching Articles
Yorumlar

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