Idenya
Di modul sebelumnya kamu sudah melihat bahwa seluruh tugas web server adalah: menerima request, mengirim balik response. Flask adalah framework Python kecil yang menangani urusan teknisnya (membaca request, menulis response, berbicara HTTP) sehingga kamu cukup menulis bagian yang menarik: apa yang harus terjadi saat seseorang mengunjungi URL ini?
Flask menyebut dirinya micro-framework. Ia memberimu routing, request dan response, template, dan tidak banyak lagi. Kamu hanya menambahkan apa yang kamu butuhkan, sehingga Flask sangat cocok untuk mempelajari cara kerja web yang sebenarnya, juga untuk membuat API kecil dan tool internal di kantor.
Aplikasi Flask paling kecil
Ini aplikasi web lengkap dalam tujuh baris. Saat seseorang mengunjungi halaman utama situsnya, aplikasi ini menjawab dengan pesan sambutan. Sekecil apa pun, setiap aplikasi Flask yang akan kamu bangun punya bagian-bagian yang sama ini:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def home():
return "Selamat datang di Toko Kita!"
Baris demi baris:
from flask import Flaskmengimpor classFlask.app = Flask(__name__)membuat aplikasimu.__name__memberi tahu Flask lokasi file kamu, supaya nanti ia bisa menemukan template dan file statis. Setiap aplikasi Flask dimulai dengan baris ini.@app.route("/")adalah decorator: ia mendaftarkan fungsi di bawahnya sebagai handler untuk path URL/, yaitu halaman beranda.home()adalah view function. Apa pun yang dikembalikannya menjadi body response, di sini berupa string biasa.
Itu sudah aplikasi web yang lengkap. Di situs ini, tekan Run, lalu buka tab Browser di bawah editor dan tekan Send: ia me-request / dari aplikasimu dan menampilkan response-nya.
Menjalankannya di komputermu
Simpan kodenya sebagai app.py, tambahkan Flask ke proyekmu dengan uv, lalu jalankan development server:
uv add flask
uv run flask --app app run --debug
Flask mencetak Running on http://127.0.0.1:5000. Buka alamat itu di browser dan kamu akan melihat pesanmu. --debug menyalakan reloader (server restart saat kamu menyimpan file) dan menampilkan halaman error yang detail. Pakai saat development, jangan pernah di server publik sungguhan.
Situs ini tidak bisa membuka port jaringan sungguhan, jadi tab Browser mengirim request langsung ke objek aplikasimu, memakai test client bawaan Flask. Request dan response-nya sama persis dengan yang diterima browser, hanya tanpa jaringan di antaranya.
Route: memetakan URL ke fungsi
Route menghubungkan path URL ke view function. Tambahkan sebanyak yang kamu mau:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def home():
return "Selamat datang di Toko Kita!"
@app.route("/about")
def about():
return "Toko Kita sells coffee, kitchen gear and desk accessories."
@app.route("/contact")
def contact():
return "Email us at [email protected]"
Sekarang /about dan /contact juga berfungsi. Kalau kamu me-request path yang tidak punya route, misalnya /careers, Flask otomatis mengembalikan 404 Not Found untukmu.
Beberapa pedoman praktis:
- Path diawali
/dan peka huruf besar-kecil:/Abouttidak sama dengan/about. - Setiap view function butuh nama yang unik. Dua fungsi yang sama-sama bernama
homemenimbulkan error, karena Flask memakai nama fungsi untuk mengenali route. - Beri nama view function sesuai halamannya, bukan aksinya:
about,product_list,checkout.
Mengembalikan HTML
View bisa mengembalikan HTML berupa string, dan browser menampilkannya sebagai halaman:
@app.route("/")
def home():
return "<h1>Toko Kita</h1><p>Fresh coffee, delivered.</p>"
Itu tidak masalah untuk sebuah judul, tetapi string HTML yang panjang di dalam Python cepat berantakan. Di modul template kamu akan memindahkan HTML ke file terpisah, yang merupakan cara yang rapi. Untuk sekarang, string pendek sudah pas untuk belajar.
Isi sebuah response
Saat view-mu mengembalikan string, Flask membungkusnya menjadi HTTP response lengkap dengan tiga bagian:
| Bagian | Contoh | Arti |
|---|---|---|
| Status code | 200 OK | Berhasil atau tidak? 200 berarti sukses, 404 berarti tidak ditemukan. |
| Headers | Content-Type: text/html | Informasi tambahan, misalnya jenis data body-nya. |
| Body | Selamat datang di Toko Kita! | Isi yang sebenarnya. |
Kamu bisa mengembalikan status code lain dengan menambahkannya setelah body, sebagai tuple:
@app.route("/old-shop")
def old_shop():
return "This page has moved to /", 410
410 Gone artinya "ini dulu ada tetapi sengaja dihapus". Kamu akan mempelajari status code yang penting di modul berikutnya.
Mengetes aplikasi dengan test client
Mengklik ke sana kemari di browser itu lambat dan mudah terlupa. Flask punya test client yang mengirim request dari Python dan memberimu response untuk diperiksa. Beginilah aplikasi Flask profesional dites, dan begini juga cara kerja pengecekan di situs ini.
client = app.test_client()
response = client.get("/about")
print(response.status_code)
print(response.get_data(as_text=True))
200
Toko Kita sells coffee, kitchen gear and desk accessories.
client.get("/about")mengirim request GET ke/about.response.status_codeadalah angka status.response.get_data(as_text=True)memberikan body sebagai string.
Mengapa ini penting untuk kode yang bersih
Route adalah janji: "URL ini mengerjakan satu hal ini". Jaga view function tetap kecil dan fokus. Kalau sebuah view mulai mengerjakan lima tugas (memuat data, menghitung, memformat, mengirim email), pindahkan tugas-tugas itu ke fungsi biasa dan panggil dari view. View yang kecil mudah dibaca, mudah dites dengan test client, dan mudah diubah tanpa merusak bagian lain situs.
Rangkuman
app = Flask(__name__)membuat aplikasi.@app.route("/path")memetakan URL ke view function.- Apa pun yang dikembalikan view menjadi body response. Kembalikan
(body, status)untuk mengatur status code. - Path yang tidak dikenal otomatis mendapat 404 Not Found.
- Jalankan secara lokal dengan
flask --app app run --debug. app.test_client()mengirim request dari Python, cara standar untuk mengetes aplikasi Flask.