HOSTING CEPATDOMAIN MURAHSSL GRATISSUPPORT 24/7UPTIME 99.9%SERVER INDONESIAHOSTING CEPATDOMAIN MURAHSSL GRATISSUPPORT 24/7UPTIME 99.9%SERVER INDONESIA
Web Development

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

Tim HostingEkspres|25 Mei 2026|15 menit baca
cara membuat website dengan flaskflask python tutorialbelajar flask pemulaflask micro frameworkflask tutorial bahasa indonesiapython web developmentflask untuk pemulaflask vs django
Cara Membuat Website dengan Flask Python: Panduan Micro Framework yang Powerful
📚 Baca juga: Cara Membuat Website dengan Django | Cara Membuat Website | Cara Belajar Web Development | Bahasa Pemrograman untuk Web

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:

cara membuat website dengan flask
Ilustrasi cara membuat website dengan flask
  • 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>&copy; 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
cara membuat website dengan flask
Ilustrasi cara membuat website dengan flask

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 parameter methods untuk mendefinisikan endpoint, dan jsonify() 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.

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.