Bagaimana cara memakai Form di Flask?
Dengan memakai contoh yang sama dengan yang ada pada tulisan tentang pemakaian query string, maka template untuk dasar.html dan apakabar.html tidak akan mengalami perubahan. Tetapi template pertama.html harus kita ubah karena sekarang kita perlu membuat form untuk mengirimkan informasi ini. Berkas pertama.html sekarang menjadi:
{% extends "dasar.html" %} {% block isi %} Kirim salam ke siapa? <form method="post"> Nama: <input type="text" name="depan"> <input type="text" name="belakang"> <br /> <input type="submit" name="name" value="Kirim"> </form> {% endblock %}Perhatikan dapa deklarasi form ini saya tidak mencantumkan atribut action yang berarti form ini akan dikirim kembali ke alamat yang menampilkan form ini, dalam hal ini URL /. Dengan demikian fungsi yang menampilkan template yang berisikan form ini harus juga memproses form ini. Sehingga program python-nya menjadi:
from flask import Flask, render_template, request, redirect, \ url_for app = Flask(__name__) @app.route("/", methods=['POST', 'GET']) def pertama(): if request.method == 'POST': if 'depan' in request.form and \ 'belakang' in request.form: depan = request.form['depan'] belakang = request.form['belakang'] return render_template("apakabar.html", namaDepan=depan, namaBelakang=belakang) return render_template("pertama.html") if __name__ == '__main__': app.run(debug=True, host="127.0.0.1", port=8080)Mari kita bedah perbedaan dalam program ini:
- Baris 5, pada decorator app.route saya tambahkan satu parameter yaitu methods yang berisikan daftar perintah HTTP apa saja yang akan diterima serta akan diproses oleh fungsi ini; kalau parameter ini tidak dicantumkan maka Flask akan secara otomatis menganggap fungsi tersebut hanya menerima perintah GET.
- Karena pada deklarasi form saya tidak mencamtukan atribut action (lihat baris 5 pada berkas pertama.html) maka form ini akan dikirim oleh browser ke alamat yang sama, yang berarti fungsi pertama bukan hanya bertugas menampilkan template pertama.html tetapi juga bertugas menangani form ini. Oleh karenanya methods harus saya deklarasi untuk memberitahu Flask bahwa fungsi ini akan memproses perintah GET dan perintah POST;
- Baris 7, karena fungsi ini sekarang menangani dua perintah HTTP maka saya terlebih dahulu harus tahu perintah mana yang masuk: apa GET (berarti saat menampilkan halaman ini saat pertama sekali) atau POST (berarti karena pengiriman form);
- Ingat kembali kalau variable request memiliki dictionary bernama args untuk menampung variable-variable pada query string. Nah khusus untuk form, variable request juga ada dictionary khusus yang bernama form yang berisikan semua elemen dari form yang dikirim;
- Baris 8-9, karena saya sudah tahu ini merupakan pengiriman form maka saya mau memastikan saja kesemua elemen dalam form ini yang saya butuhkan ikut terkirim;
- Baris 10, saya mengambil isi dari input text yang bernama depan (lihat baris 7 dari berkas apakabar.html);
- Baris 11, saya mengambil isi dari input text yang bernama belakang (lihat baris 8 dari berkas apakabar.html);
- Baris 12-14, membangkitkan template apakabar.html dengan mengirimkan kedua variable yang dibutuhkannya;
- Baris 16, akan dijalankan jika perintah yang ditangani adalah perintah GET yang hanya menampilkan template pertama.html.