Query string pada dasarnya adalah bagian dari URL setelah karakter tanda tanya (?). Misalnya, pada URL berikut:
http://localhost:8080?par1=rahmad&par2=dawoodYang dimaksud query string disini adalah segala sesuatu setelah tanda tanya (?) dan disini terdapat dua parameter yang dipisahkan oleh karakter dan (&), yaitu: parameter par1 yang bernilai rahmad dan parameter par2 yang bernilai dawood.
Nah sekarang bagaimana memakai query string di Flask?
Dalam contoh berikut halaman utama (dengan URL "/") akan mengirimkan sebuah nama ke halaman dengan URL "/apakabar" untuk ditampilkan. Kedua halaman ini akan memakai dasar.html sebagai fondasinya.
Isi dasar.html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> </head> <body> {% block isi %}{% endblock %} </body> </html>
URL "/apakabar" akan menampilkan template apakabar.html yang berisi:
{% extends "dasar.html" %} {% block isi %} <h1>Apakabar {{ namaDepan }} {{ namaBelakang }}...</h1> {% endblock %}Perhatikan pada baris 4 ada tag khusus {{ namaDepan }} dan {{ namaBelakang }}yang merupakan perintah ke Jinja (dan Flask) untuk mengambil nilai dari kedua variable ini dan tampikan dilokasi tersebut.
Sedangkan halaman utama pada URL "/" akan menampilkan template pertama.html yang berisi:
{% extends "dasar.html" %} {% block isi %} Kirim salam ke siapa? <ul> <li> <a href="/apakabar?depan=Rahmad&belakang=Dawood"> Rahmad Dawood </a> </li> </ul> {% endblock %}
Sedangkan program python-nya sendiri akan seperti berikut:
from flask import Flask, render_template, request from flask import redirect, url_for app = Flask(__name__) @app.route("/") def pertama(): return render_template("pertama.html") @app.route("/apakabar") def apakabar(): if "depan" in request.args and "belakang" in request.args: return render_template("apakabar.html", namaDepan=request.args["depan"], namaBelakang=request.args["belakang"]) return redirect(url_for("pertama")) app.run(debug=True, host="127.0.0.1", port=8080)Mari kita bedah program ini:
- Baris 1-2 untuk memuat segala class dan fungsi yang akan dipakai;
- Baris 4 untuk menginisialisasi aplikasi Flask ini;
- Baris 18 untuk menjalankan program aplikasi web pada alamat http://127.0.0.1:8080
- Baris 6-8 untuk menampilkan halaman utama pada URL "/" (atau URL lengkapnya "http://127.0.0.1:8080/") dari template pertama.html;
- Baris 10-16 untuk menampilkan URL "/apakabar" (atau URL lengkapnya "http://127.0.0.1:8080/apakabar");
- Perlu diketahui bahwa Flask akan secara otomatis memilah query string yang diterimanya dan menempatkan semua parameter yang ditemukannya pada dictionary yang bernama args yang merupakan bagian dari variable request. Key dari dictionary args adalah nama-nama parameter yang ditemukan pada query string tersebut sedangkan value-nya adalah nilai dari parameter tersebut;
- Baris 12 untuk memeriksa apakah ada parameter depan dan belakang. Jika kedua parameter ini ada maka nilainya akan diambil dan dikirimkan ke halaman apakabar.html untuk ditampilkan (baris 13-15). Jika salah satu saja dari parameter ini tidak ditemukan pada query string maka perintah-perintah yang dilindungi oleh pernyataan if (baris 13-15) akan diabaikan dan langsung ke baris 16;
- Perintah if ini saya tulis untuk menjaga dari kemungkinkan pengiriman URL yang salah yang mungkin terjadi jika seorang user salah mengetikkan URL ini dan bukannya mengklik link yang disediakan. Misalnya URL yang diketik adalah http://localhost:8080/apakabar?dpan=Rahmad&belakang=Dawood dimana parameter dpan salah diketik yang seharusnya depan;
- Perhatikan disini parameter kedua dan ketiga saat memanggil fungsi render_template (baris 15-16) adalah namaDepan dan namaBelakang yang namanya sama dengan variable-variable yang akan ditampilkan pada halaman apakabar.html (lihat kembali baris 4 pada apakabar.html di atas);
- Baris 16 untuk memerintah Flask untuk mengalihkan (=redirect) ke fungsi yang bernama pertama, yang akan kembali menampilkan URL "http://127.0.0.1:8080/". Fungsi url_for akan membantu untuk membangkitkan URL yang benar, saya bisa saja tidak memakai fungsi ini dan langsung menuliskan "/".
bagus
ReplyDelete