Cara Membuat Website dengan Flask Python: Panduan Micro Framework yang Powerful

Apa Itu Flask dan Mengapa Harus Dipelajari?
Cara membuat website dengan Flask adalah topik yang wajib dipelajari oleh setiap developer Python yang ingin masuk ke dunia web development. Flask adalah micro web framework yang ditulis dalam Python - disebut "micro" bukan karena kemampuannya yang terbatas, melainkan karena prinsip desainnya yang minimalis dan tidak memaksakan cara tertentu dalam membangun aplikasi.
Berbeda dengan Django yang menyediakan hampir semua komponen secara bawaan (batteries included), Flask memberikan fondasi yang ringan dan fleksibel. Anda memiliki kebebasan penuh untuk memilih library apa yang ingin digunakan: ORM database, sistem autentikasi, form validation, dan lainnya. Filosofi ini menjadikan Flask sangat digemari oleh developer yang ingin kontrol penuh atas arsitektur aplikasinya.
Flask digunakan oleh perusahaan besar seperti LinkedIn, Pinterest, Netflix (untuk beberapa layanan internal), dan ribuan startup di seluruh dunia. Keunggulan Flask terletak pada kemudahannya untuk membangun REST API, microservice, dan prototipe cepat. Dengan Flask, Anda bisa membuat endpoint API sederhana hanya dengan beberapa baris kode Python.
Dalam panduan ini, Anda akan belajar cara membuat website dengan Flask dari nol: instalasi, routing, template Jinja2, form handling, koneksi database, REST API, hingga deployment ke hosting.
Prasyarat Sebelum Belajar Flask
Sebelum mengikuti tutorial Flask ini, pastikan Anda sudah memahami:

- Python 3.8 atau lebih baru - Flask 3.x mendukung Python 3.8+
- Dasar-dasar Python - Fungsi, class, decorator, dan modul Python
- HTML dan CSS dasar - Untuk membuat template halaman web
- Konsep HTTP dasar - Request, response, method GET/POST, status code
- pip dan virtual environment - Untuk manajemen dependensi Python
Flask memiliki kurva belajar yang lebih landai dibanding Django, sehingga sangat cocok sebagai framework Python web pertama Anda setelah memahami dasar-dasar Python.
Langkah 1: Instalasi Flask
Membuat Virtual Environment
Selalu mulai proyek Flask dengan membuat virtual environment untuk mengisolasi dependensi:
# Buat folder proyek
mkdir website-flask
cd website-flask
# Buat virtual environment
python -m venv venv
# Aktifkan virtual environment
# Windows:
venvScriptsactivate
# macOS/Linux:
source venv/bin/activate
Install Flask
# Install Flask
pip install flask
# Verifikasi instalasi
python -c "import flask; print(flask.__version__)"
# Output: 3.x.x
Aplikasi Flask Pertama
Buat file app.py dan tulis kode berikut:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def beranda():
return '<h1>Halo dari Flask!</h1><p>Website Python saya berjalan.</p>'
if __name__ == '__main__':
app.run(debug=True)
Jalankan aplikasi:
python app.py
Buka http://127.0.0.1:5000 di browser. Jika muncul teks "Halo dari Flask!",
instalasi berhasil dan aplikasi Flask pertama Anda sudah berjalan.
Langkah 2: Routing - Cara Flask Menangani URL
Routing adalah proses menghubungkan URL dengan fungsi Python yang akan menanggapi request tersebut.
Di Flask, routing dilakukan dengan decorator @app.route():
from flask import Flask
app = Flask(__name__)
@app.route('/')
def beranda():
return '<h1>Beranda</h1>'
@app.route('/tentang')
def tentang():
return '<h1>Tentang Kami</h1>'
@app.route('/blog/<int:post_id>')
def detail_blog(post_id):
return f'<h1>Artikel #{post_id}</h1>'
@app.route('/pengguna/<string:username>')
def profil(username):
return f'<h1>Profil: {username}</h1>'
# Route dengan multiple HTTP methods
@app.route('/kontak', methods=['GET', 'POST'])
def kontak():
if request.method == 'POST':
return 'Form dikirim!'
return '<h1>Form Kontak</h1>'
Konverter URL di Flask
Flask mendukung beberapa konverter tipe data dalam URL:
<string:nama>- String (default, tidak perlu ditulis)<int:id>- Bilangan bulat positif<float:nilai>- Bilangan desimal<path:jalur>- String yang bisa mengandung slash (/)<uuid:token>- UUID string
Langkah 3: Template Jinja2 - Tampilkan HTML yang Dinamis
Flask menggunakan Jinja2 sebagai template engine. Jinja2 memungkinkan Anda menyisipkan data Python ke dalam file HTML menggunakan sintaks khusus.
Struktur Folder Proyek Flask
website-flask/
├── app.py ← File utama aplikasi Flask
├── templates/ ← Folder untuk file HTML
│ ├── base.html ← Layout dasar (parent template)
│ ├── beranda.html ← Halaman beranda
│ └── blog/
│ ├── daftar.html ← Daftar semua artikel
│ └── detail.html ← Detail satu artikel
├── static/ ← Folder untuk CSS, JS, gambar
│ ├── css/
│ │ └── style.css
│ └── js/
│ └── main.js
└── venv/
File: templates/base.html (Layout Dasar)
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}Website Flask{% endblock %}</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
</head>
<body>
<nav>
<a href="{{ url_for('beranda') }}">Beranda</a>
<a href="{{ url_for('blog.daftar') }}">Blog</a>
<a href="{{ url_for('kontak') }}">Kontak</a>
</nav>
<main>
{% with messages = get_flashed_messages(with_categories=true) %}
{% for category, message in messages %}
<div class="alert alert-{{ category }}">{{ message }}</div>
{% endfor %}
{% endwith %}
{% block content %}{% endblock %}
</main>
<footer>
<p>© 2026 Website Flask Saya</p>
</footer>
</body>
</html>
Menggunakan Template di View Flask
from flask import Flask, render_template
app = Flask(__name__)
artikel_list = [
{'id': 1, 'judul': 'Belajar Flask dari Nol', 'konten': 'Flask adalah micro framework Python...'},
{'id': 2, 'judul': 'Tips Optimasi Website', 'konten': 'Cara meningkatkan performa website...'},
{'id': 3, 'judul': 'Panduan Deploy Flask', 'konten': 'Langkah deploy aplikasi Flask ke VPS...'},
]
@app.route('/')
def beranda():
return render_template('beranda.html', total_artikel=len(artikel_list))
@app.route('/blog')
def daftar_blog():
return render_template('blog/daftar.html', artikels=artikel_list)
@app.route('/blog/<int:post_id>')
def detail_blog(post_id):
artikel = next((a for a in artikel_list if a['id'] == post_id), None)
if not artikel:
return render_template('404.html'), 404
return render_template('blog/detail.html', artikel=artikel)
Sintaks Jinja2 yang Penting
<!-- templates/blog/daftar.html -->
{% extends 'base.html' %}
{% block title %}Semua Artikel{% endblock %}
{% block content %}
<h1>Semua Artikel ({{ artikels|length }} artikel)</h1>
{% if artikels %}
{% for artikel in artikels %}
<article>
<h2><a href="{{ url_for('detail_blog', post_id=artikel.id) }}">{{ artikel.judul }}</a></h2>
<p>{{ artikel.konten[:100] }}...</p>
</article>
{% endfor %}
{% else %}
<p>Belum ada artikel.</p>
{% endif %}
{% endblock %}
Langkah 4: Form Handling dan Flash Messages
Flask menyediakan objek request untuk mengakses data form yang dikirim pengguna,
dan fungsi flash() untuk menampilkan pesan sementara (notifikasi):
from flask import Flask, render_template, request, redirect, url_for, flash
app = Flask(__name__)
app.secret_key = 'kunci-rahasia-yang-kuat' # diperlukan untuk flash messages
@app.route('/kontak', methods=['GET', 'POST'])
def kontak():
if request.method == 'POST':
nama = request.form.get('nama', '').strip()
email = request.form.get('email', '').strip()
pesan = request.form.get('pesan', '').strip()
# Validasi sederhana
if not nama or not email or not pesan:
flash('Semua field wajib diisi!', 'danger')
return redirect(url_for('kontak'))
if '@' not in email:
flash('Format email tidak valid!', 'danger')
return redirect(url_for('kontak'))
# Proses pengiriman email atau simpan ke database
# send_email(nama, email, pesan)
flash(f'Terima kasih {nama}! Pesan Anda sudah diterima.', 'success')
return redirect(url_for('beranda'))
return render_template('kontak.html')
Langkah 5: Koneksi Database dengan Flask-SQLAlchemy
Flask tidak memiliki ORM bawaan, tetapi ekstensi Flask-SQLAlchemy menyediakan ORM yang powerful dan mudah digunakan, terinspirasi dari Django ORM:
pip install flask-sqlalchemy flask-migrate
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from datetime import datetime
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///website.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.secret_key = 'kunci-rahasia-anda'
db = SQLAlchemy(app)
migrate = Migrate(app, db)
class Artikel(db.Model):
__tablename__ = 'artikel'
id = db.Column(db.Integer, primary_key=True)
judul = db.Column(db.String(200), nullable=False)
slug = db.Column(db.String(200), unique=True, nullable=False)
konten = db.Column(db.Text, nullable=False)
tanggal_dibuat = db.Column(db.DateTime, default=datetime.utcnow)
diterbitkan = db.Column(db.Boolean, default=True)
def __repr__(self):
return f'<Artikel {self.judul}>'
# Gunakan di view:
@app.route('/blog')
def daftar_blog():
artikels = Artikel.query.filter_by(diterbitkan=True).order_by(
Artikel.tanggal_dibuat.desc()
).all()
return render_template('blog/daftar.html', artikels=artikels)
@app.route('/blog/<string:slug>')
def detail_blog(slug):
artikel = Artikel.query.filter_by(slug=slug, diterbitkan=True).first_or_404()
return render_template('blog/detail.html', artikel=artikel)
Inisialisasi Database dan Migrasi
# Inisialisasi migrasi
flask db init
# Buat file migrasi
flask db migrate -m "Buat tabel artikel"
# Terapkan migrasi
flask db upgrade

Langkah 6: Membuat REST API dengan Flask
Salah satu keunggulan terbesar Flask adalah kemudahan membuat REST API. Berikut contoh membuat API endpoint sederhana dengan Flask:
from flask import Flask, jsonify, request
app = Flask(__name__)
# Data dummy (biasanya dari database)
produk = [
{'id': 1, 'nama': 'Hosting Starter', 'harga': 15000},
{'id': 2, 'nama': 'Hosting Business', 'harga': 35000},
{'id': 3, 'nama': 'Hosting Enterprise', 'harga': 75000},
]
@app.route('/api/produk', methods=['GET'])
def get_produk():
return jsonify({
'status': 'success',
'data': produk,
'total': len(produk)
})
@app.route('/api/produk/<int:produk_id>', methods=['GET'])
def get_satu_produk(produk_id):
item = next((p for p in produk if p['id'] == produk_id), None)
if not item:
return jsonify({'status': 'error', 'message': 'Produk tidak ditemukan'}), 404
return jsonify({'status': 'success', 'data': item})
@app.route('/api/produk', methods=['POST'])
def tambah_produk():
data = request.get_json()
if not data or 'nama' not in data or 'harga' not in data:
return jsonify({'status': 'error', 'message': 'Data tidak lengkap'}), 400
produk_baru = {
'id': len(produk) + 1,
'nama': data['nama'],
'harga': data['harga']
}
produk.append(produk_baru)
return jsonify({'status': 'success', 'data': produk_baru}), 201
Langkah 7: Blueprint - Organisasi Kode Flask yang Lebih Baik
Untuk proyek yang lebih besar, gunakan Flask Blueprint untuk memisahkan kode menjadi modul-modul yang terorganisir. Blueprint bekerja mirip dengan "app" di Django:
# blog/views.py
from flask import Blueprint, render_template
from ..models import Artikel
blog_bp = Blueprint('blog', __name__, url_prefix='/blog')
@blog_bp.route('/')
def daftar():
artikels = Artikel.query.filter_by(diterbitkan=True).all()
return render_template('blog/daftar.html', artikels=artikels)
@blog_bp.route('/<string:slug>')
def detail(slug):
artikel = Artikel.query.filter_by(slug=slug).first_or_404()
return render_template('blog/detail.html', artikel=artikel)
# app.py - daftarkan Blueprint
from flask import Flask
from blog.views import blog_bp
app = Flask(__name__)
app.register_blueprint(blog_bp)
Langkah 8: Autentikasi dengan Flask-Login
Tambahkan sistem login ke aplikasi Flask menggunakan ekstensi Flask-Login:
pip install flask-login flask-bcrypt
from flask import Flask, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, UserMixin, login_required, current_user
app = Flask(__name__)
db = SQLAlchemy(app)
login_manager = LoginManager(app)
login_manager.login_view = 'auth.login'
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password_hash = db.Column(db.String(255), nullable=False)
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
@app.route('/dashboard')
@login_required
def dashboard():
return f'Selamat datang, {current_user.username}!'
Langkah 9: Deploy Flask ke VPS Indonesia
Deployment Flask ke production menggunakan stack yang sama dengan Django: Gunicorn + Nginx.
Untuk Flask, gunakan Gunicorn dengan entry point ke objek app:
# Install Gunicorn
pip install gunicorn
# Test jalankan (app = nama variabel Flask di app.py)
gunicorn app:app --bind 0.0.0.0:5000 --workers 3
Buat file gunicorn.service untuk systemd:
[Unit]
Description=Gunicorn untuk Flask App
After=network.target
[Service]
User=ubuntu
WorkingDirectory=/home/ubuntu/website-flask
ExecStart=/home/ubuntu/website-flask/venv/bin/gunicorn --workers 3 --bind unix:/home/ubuntu/website-flask/flask.sock app:app
[Install]
WantedBy=multi-user.target
Konfigurasi Nginx untuk Flask:
server {
listen 80;
server_name domainanda.com www.domainanda.com;
location /static/ {
root /home/ubuntu/website-flask;
expires 30d;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/ubuntu/website-flask/flask.sock;
}
}
Setelah Nginx aktif, pasang SSL gratis dengan Certbot:
sudo certbot --nginx -d domainanda.com -d www.domainanda.com
Untuk memilih layanan hosting yang tepat, baca panduan lengkap kami tentang Python hosting Indonesia terbaik yang mencakup perbandingan VPS lokal, cloud platform, dan tips optimasi server Python.
Flask vs Django: Kapan Harus Memilih Flask?
Setelah memahami cara membuat website dengan Flask, pertanyaan wajar yang muncul adalah: kapan sebaiknya memilih Flask dibanding Django?
- Pilih Flask jika: Anda membangun REST API atau microservice, proyek Anda relatif kecil dan tidak butuh banyak fitur bawaan, Anda menginginkan kontrol penuh atas setiap komponen yang digunakan, atau Anda membangun prototipe dengan cepat.
- Pilih Django jika: Proyek Anda membutuhkan admin panel, sistem autentikasi lengkap, ORM yang kuat, atau berbagai fitur yang disediakan secara bawaan. Django jauh lebih produktif untuk proyek skala menengah ke atas.
Banyak developer Python yang merekomendasikan belajar Flask terlebih dahulu karena strukturnya yang lebih sederhana membantu memahami cara kerja web framework secara mendasar, sebelum beralih ke Django yang lebih kompleks.
FAQ: Cara Membuat Website dengan Flask Python
- Apa perbedaan Flask dan Django untuk membuat website Python?
- Flask adalah micro framework yang minimalis dan fleksibel - Anda bebas memilih library untuk ORM, autentikasi, dan fitur lainnya. Django adalah full-stack framework dengan hampir semua komponen sudah tersedia secara bawaan. Flask cocok untuk REST API dan microservice, Django lebih produktif untuk proyek skala menengah ke atas.
- Apakah Flask cocok untuk pemula Python web development?
- Ya, Flask sangat cocok untuk pemula karena kurva belajarnya yang landai. Anda bisa membuat aplikasi web sederhana hanya dalam beberapa baris kode. Flask juga membantu memahami konsep dasar web development (routing, request-response, template) tanpa terlalu banyak abstraksi.
- Bagaimana cara membuat REST API dengan Flask?
-
Gunakan decorator
@app.route()dengan parametermethodsuntuk mendefinisikan endpoint, danjsonify()untuk mengembalikan response JSON. Untuk API kompleks, pertimbangkan Flask-RESTful atau Marshmallow untuk serialisasi data. - Apa itu Flask Blueprint dan kapan digunakan?
- Flask Blueprint adalah cara mengorganisasi aplikasi Flask besar ke dalam modul-modul yang terpisah. Misalnya, memisahkan kode untuk blog, autentikasi, dan API ke blueprint berbeda. Blueprint memudahkan pemeliharaan kode dan memungkinkan reuse komponen.
- Database apa yang bisa digunakan dengan Flask?
- Pilihan paling populer adalah Flask-SQLAlchemy yang mendukung PostgreSQL, MySQL, dan SQLite. Untuk NoSQL, bisa menggunakan PyMongo (MongoDB) atau Flask-Redis. PostgreSQL direkomendasikan untuk production, SQLite cukup untuk development dan proyek kecil.
- Apakah Flask bisa digunakan untuk aplikasi skala besar?
- Ya, Flask bisa digunakan untuk aplikasi skala besar dengan arsitektur yang tepat: Blueprint untuk modularitas, Redis untuk caching, dan optimasi query database. Namun untuk banyak use case skala besar, Django atau FastAPI mungkin lebih cocok.
- Bagaimana cara deploy Flask ke hosting Indonesia?
- Gunakan VPS dengan stack Gunicorn + Nginx: upload kode via Git, buat virtual environment, konfigurasi Gunicorn sebagai systemd service, konfigurasi Nginx sebagai reverse proxy, dan pasang SSL dengan Let's Encrypt. Atau gunakan PaaS seperti Railway untuk kemudahan auto-deploy dari GitHub.
Kesimpulan
Cara membuat website dengan Flask Python terbukti sangat fleksibel dan tidak intimidasi, bahkan untuk pemula sekalipun. Dengan prinsip micro framework yang minimalis, Flask memberi Anda kebebasan untuk membangun aplikasi web sesuai kebutuhan spesifik - mulai dari website sederhana, REST API, hingga layanan microservice yang kompleks.
Mulailah dengan routing dasar dan template Jinja2, lalu perlahan tambahkan Flask-SQLAlchemy untuk database, Flask-Login untuk autentikasi, dan Blueprint untuk modularitas kode. Setiap komponen Flask dirancang untuk bisa ditambahkan secara bertahap sesuai dengan berkembangnya kebutuhan proyek Anda.
Setelah aplikasi Flask Anda siap, langkah selanjutnya adalah deployment ke hosting yang andal. Baca panduan kami tentang Python hosting Indonesia terbaik untuk menemukan VPS dan cloud hosting yang paling cocok untuk proyek Flask Anda, dengan server berlokasi di Indonesia untuk latensi terbaik bagi pengguna lokal.
Artikel Terkait
Cara Membuat Website dengan Django Python: Panduan Lengkap untuk Pemula
Panduan lengkap cara membuat website dengan Django Python untuk pemula. Mulai dari instalasi, membuat project, model, views, template, hingga deploy ke hosting. Belajar Django step-by-step dalam Bahasa Indonesia.
Baca Selengkapnya →Python Hosting Indonesia Terbaik 2026: Rekomendasi VPS dan Cloud untuk Django & Flask
Rekomendasi Python hosting Indonesia terbaik untuk Django, Flask, dan FastAPI. Panduan memilih VPS hosting dan cloud server terbaik untuk aplikasi Python di Indonesia, lengkap dengan perbandingan harga dan fitur.
Baca Selengkapnya →Cara Membuat REST API: Panduan Lengkap untuk Pemula 2026
Panduan lengkap cara membuat REST API dari nol untuk pemula. Pelajari konsep API, metode HTTP, cara membuat endpoint, autentikasi, hingga deploy API ke hosting - dilengkapi contoh kode Node.js dan PHP.
Baca Selengkapnya →Butuh Hosting untuk Website Anda?
Dapatkan hosting cepat, aman, dan terpercaya dengan harga terjangkau. Gratis domain, SSL, dan support 24/7.
Jangan Ketinggalan Promo!
Subscribe newsletter kami dan dapatkan diskon hingga 50% untuk pembelian pertama kamu.
Gratis, tanpa spam. Bisa unsubscribe kapan saja.