Praktik pertama membangun aplikasi Flask minimal, menjalankannya dengan CLI flask --app app run, memahami debug mode, environment variables, dan perbedaan app.run() vs perintah flask CLI.

Setelah memahami arsitektur di episode 2, saatnya aksi nyata pertama: membuat Hello World Flask dan menjalankannya. Episode ini membangun fondasi yang akan kalian pakai di semua episode berikutnya — cara menjalankan server, membaca log, dan memakai debug mode. Kesalahan kecil di sini (misal file tidak bernama app.py) sering bikin pemula frustrasi, padahal solusinya satu baris.
Ingat lab kalian di episode 0: flask-lab/ dengan virtual environment aktif dan Flask 3.1.x terinstall. Kita akan memakainya sekarang.
Buat file app.py dengan isi paling sederhana:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello() -> str:
return "Hello, Flask!"Dekomposisinya: Flask(__name__) membuat instance aplikasi — __name__ memberi tahu Flask di mana mencari template dan static files. @app.route("/") mendaftarkan fungsi hello untuk menangani request ke path /. Return string langsung menjadi body response dengan status 200.
Cara modern menjalankan aplikasi adalah lewat CLI flask, bukan app.run():
flask --app app runOutput-nya kira-kira:
* Serving Flask app 'app'
* Debug mode: off
* Running on http://127.0.0.1:5000 (Press CTRL+C to quit)Buka http://127.0.0.1:5000 di browser — kalian akan melihat Hello, Flask!. Opsi --app app memberitahu Flask modul mana yang berisi instance app. Jika file kalian bernama app.py, flag ini bisa dihilangkan karena app adalah nama default.
Tip
flask --app app run jauh lebih baik daripada app.run() di dalam kode: CLI memberi kalian akses ke perintah bawaan seperti flask routes (daftar semua route) dan flask shell (REPL dengan application context), serta memisahkan konfigurasi run dari kode aplikasi.
CLI flask membaca beberapa environment variables. Dua yang paling penting:
FLASK_APP: lokasi aplikasi (bisa di-set supaya flask run tidak perlu --app).FLASK_DEBUG: mengaktifkan debug mode.export FLASK_APP=app
export FLASK_DEBUG=1
flask runSetelah FLASK_DEBUG=1, perhatikan dua perubahan besar: server otomatis reload saat file berubah (tanpa restart manual), dan debugger interaktif muncul di browser saat terjadi error.
Debug mode adalah pedang bermata dua. Aktifkan hanya saat development:
flask --app app run --debugFlask 3.1 menampilkan peringatan jelas saat debug aktif. Kebiasaan yang benar: aktifkan debug hanya di development, dan set FLASK_DEBUG=0 (atau hilangkan) di produksi. Kita formalisasikan pemisahan konfigurasi dev/prod di episode 8.
Warning
Jangan pernah menjalankan Flask dengan debug mode aktif di server produksi. Debugger memberi akses eksekusi kode via browser — satu request ke port aplikasi dan server kalian bisa dikendalikan orang lain. Selalu pasang reverse proxy dan matikan debug di produksi (episode 20 dan 22).
Secara default Flask melayani di 127.0.0.1:5000 — hanya bisa diakses dari mesin yang sama. Untuk development di jaringan lokal, atau sebelum dipasangkan reverse proxy, kalian bisa ubah host dan port:
flask --app app run --host 0.0.0.0 --port 8000--host 0.0.0.0 membuat server mendengarkan semua interface jaringan. Ini berguna saat kalian ingin menguji dari perangkat lain (misal ponsel di Wi-Fi yang sama), tetapi ingat: 0.0.0.0 juga berarti siapa pun yang bisa menjangkau mesin kalian akan sampai ke server — jadi hanya untuk development.
Kalau melihat tutorial lama, kalian akan sering menemui blok ini:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello() -> str:
return "Hello, Flask!"
if __name__ == "__main__":
app.run(debug=True)Pola ini masih berfungsi, tetapi bukan praktik terbaik: konfigurasi berjalan tercampur ke dalam kode, dan debug=True bisa saja ikut terekspor. Modern, gunakan CLI:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello() -> str:
return "Hello, Flask!"Dan jalankan dengan:
flask --app app run --debugKode menjadi murni deklaratif — server hanyalah detail eksekusi. Pola ini juga yang akan dipakai seluruh series ke depan.
Sebelum menutup episode, mari tambah route yang mengembalikan JSON — persiapan untuk episode 4:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/")
def hello() -> str:
return "Hello, Flask!"
@app.route("/api/ping")
def ping() -> dict:
return jsonify({"status": "ok", "message": "pong"})Dengan jsonify(), dictionary Python diubah menjadi response JSON dengan Content-Type: application/json yang benar. Cek dengan curl:
curl http://127.0.0.1:5000/api/pingPada episode 3 ini, kalian telah menjalankan aplikasi Flask pertama dan memahami cara kerjanya.
Inti yang harus dibawa pulang:
app = Flask(__name__) + @app.route("/") adalah inti aplikasi minimal.flask --app app run; gunakan FLASK_DEBUG=1 atau --debug di development.--host 0.0.0.0 --port 8000 untuk akses jaringan lokal.jsonify() menyiapkan kita untuk API di episode 4.Di episode 4 selanjutnya, kita membahas inti dari semua web framework: routing, URL, dan HTTP methods — variabel path, converters (int, path, uuid), methods GET/POST/PUT/DELETE, dan pembuatan endpoint CRUD dasar dengan JSON. Pastikan flask-lab kalian siap, karena episode 4 akan penuh kode!