Pengembangan Web dengan Flask: Dari Dasar hingga Aplikasi Skala Menengah

Pengembangan Web dengan Flask: Dari Dasar hingga Aplikasi Skala Menengah

Sun Jun 07 2026
862 words · 7 minutes

Artikel ini akan membahas secara menyeluruh cara membangun aplikasi web menggunakan Flask, mulai dari instalasi, struktur dasar aplikasi, hingga pembuatan aplikasi skala menengah dengan fitur autentikasi, database, form, dan struktur yang terorganisir.


1. Mengapa Memilih Flask?

Flask sering disebut sebagai micro-framework. Namun jangan salah paham — “micro” di sini bukan berarti Flask memiliki fitur yang sedikit. Sebaliknya, Flask hanya menyediakan inti yang solid (routing, request handling, dan template engine), sementara fitur-fitur lanjutan disediakan melalui ekstensi pihak ketiga.

Keunggulan utama Flask:

  • Ringan dan cepat — Tidak memaksa Anda menggunakan komponen yang tidak Anda butuhkan.
  • Fleksibel — Anda bebas memilih database, sistem autentikasi, atau cara struktur aplikasi.
  • Mudah dipelajari — Cocok untuk pemula sekaligus developer berpengalaman.
  • Ekosistem ekstensi yang kaya — Banyak ekstensi berkualitas tinggi tersedia (SQLAlchemy, Flask-Login, Flask-WTF, dll).

2. Persiapan dan Instalasi

Menggunakan Virtual Environment

Sebelum mulai, sangat disarankan menggunakan virtual environment agar dependensi proyek terisolasi dari Python sistem.

Terminal window
python -m venv venv
source venv/bin/activate # Linux / macOS
venv\Scripts\activate # Windows

Instalasi Flask

Setelah virtual environment aktif, instal Flask:

Terminal window
pip install flask

Untuk proyek yang lebih besar, biasanya kita juga akan membutuhkan beberapa paket tambahan seperti:

Terminal window
pip install flask-sqlalchemy flask-wtf flask-login flask-migrate

3. Struktur Aplikasi Dasar

Setiap aplikasi Flask dimulai dengan membuat instance aplikasi.

File app.py (atau hello.py)

from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return '<h1>Hello, World!</h1>'
if __name__ == '__main__':
app.run(debug=True)

Jalankan aplikasi:

Terminal window
python app.py

Buka browser dan akses http://127.0.0.1:5000/.

Route dan View Function

  • @app.route('/') adalah decorator yang menghubungkan URL dengan fungsi Python.
  • Fungsi yang terhubung dengan route disebut view function.
  • View function bertugas memproses request dan mengembalikan response.

Contoh route dinamis:

@app.route('/user/<name>')
def user(name):
return f'<h1>Hello, {name}!</h1>'

4. Request dan Response Cycle

Ketika Flask menerima request dari client, ia akan:

  1. Mendorong application context dan request context.
  2. Mencari view function yang sesuai dengan URL.
  3. Menjalankan view function.
  4. Mengembalikan response ke client.

Beberapa objek penting yang tersedia melalui context:

ObjekKonteksKegunaan
requestRequest contextBerisi data HTTP request (form, headers, args, dll)
sessionRequest contextMenyimpan data antar request untuk satu user
current_appApplication contextInstance aplikasi yang sedang aktif
gApplication contextObjek untuk menyimpan data sementara selama request

5. Templates dengan Jinja2

Menulis HTML langsung di dalam view function sangat tidak praktis. Flask menggunakan Jinja2 sebagai template engine.

Struktur Folder

myapp/
├── app.py
├── templates/
│ ├── index.html
│ └── user.html
└── static/

Contoh Template (templates/index.html)

<!DOCTYPE html>
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
<h1>Hello, {{ name }}!</h1>
</body>
</html>

Rendering Template di View Function

from flask import render_template
@app.route('/')
def index():
return render_template('index.html', title='Home', name='Rifki')

Jinja2 mendukung:

  • Variabel ({{ variable }})
  • Control structure ({% if %}, {% for %})
  • Filter ({{ name|upper }})
  • Template inheritance ({% extends %} dan {% block %})

6. Web Forms dengan Flask-WTF

Mengelola form secara manual sangat rawan error. Flask-WTF menyediakan integrasi yang sangat baik dengan WTForms.

Contoh Form Sederhana

from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
class NameForm(FlaskForm):
name = StringField('What is your name?', validators=[DataRequired()])
submit = SubmitField('Submit')

Menggunakan Form di View

@app.route('/', methods=['GET', 'POST'])
def index():
form = NameForm()
if form.validate_on_submit():
name = form.name.data
form.name.data = ''
return render_template('index.html', form=form, name=name)
return render_template('index.html', form=form)

Fitur penting Flask-WTF:

  • Validasi otomatis
  • Proteksi CSRF
  • Integrasi dengan Bootstrap (melalui Flask-Bootstrap)

7. Database dengan Flask-SQLAlchemy

Flask tidak memaksakan ORM tertentu. Namun SQLAlchemy adalah pilihan paling populer dan powerful.

Konfigurasi

from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data.sqlite'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

Mendefinisikan Model

class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True)
email = db.Column(db.String(120), unique=True, index=True)
def __repr__(self):
return f'<User {self.username}>'

Operasi Database

# Membuat tabel
db.create_all()
# Menambah data
u = User(username='rifki', email='rifki@example.com')
db.session.add(u)
db.session.commit()
# Query
users = User.query.all()
user = User.query.filter_by(username='rifki').first()

8. Struktur Aplikasi Skala Menengah dan Besar

Saat aplikasi semakin besar, menyimpan semua kode dalam satu file menjadi tidak praktis. Berikut struktur yang direkomendasikan:

Struktur Direktor

myapp/
├── app/
│ ├── __init__.py # Application Factory
│ ├── models.py
│ ├── forms.py
│ ├── views.py
│ └── templates/
├── migrations/ # Flask-Migrate
├── config.py
├── requirements.txt
└── run.py

Application Factory Pattern

app/__init__.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
db.init_app(app)
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)
return app

Menggunakan Blueprint

Blueprint memungkinkan kita memecah aplikasi menjadi modul-modul yang lebih kecil dan reusable.

app/main/__init__.py
from flask import Blueprint
main = Blueprint('main', __name__)
from . import views, errors

9. Autentikasi dan Keamanan

Untuk aplikasi yang membutuhkan login, biasanya digunakan kombinasi:

  • Flask-Login → Mengelola session user
  • Werkzeug → Hashing password (generate_password_hash & check_password_hash)
  • itsdangerous → Membuat token konfirmasi email

Contoh alur autentikasi yang baik:

  1. User register → Hash password → Simpan ke database
  2. User login → Verifikasi password → Login user via Flask-Login
  3. Proteksi route menggunakan @login_required
  4. Konfirmasi email menggunakan token

10. Testing dan Deployment

Testing

Flask sangat mendukung testing. Anda bisa menggunakan:

  • unittest atau pytest
  • Flask test client
  • Coverage report

Deployment

Beberapa opsi deployment populer:

  • Gunicorn + Nginx (traditional)
  • Heroku, PythonAnywhere, Render, Railway
  • Docker + Docker Compose

Contoh command Gunicorn:

Terminal window
gunicorn -w 4 -b 0.0.0.0:8000 "app:create_app('production')"

Kesimpulan

Flask memberikan keseimbangan yang sangat baik antara kesederhanaan dan kekuatan. Dengan pendekatan yang minimalis di intinya, Flask memungkinkan developer untuk:

  • Mulai dengan cepat untuk proyek kecil
  • Membangun struktur yang rapi dan scalable untuk proyek besar
  • Memilih sendiri teknologi yang paling sesuai dengan kebutuhan

Kunci sukses mengembangkan aplikasi dengan Flask adalah memahami konsep dasar dengan baik (context, routing, template, form, database), kemudian menerapkan pola desain yang baik seperti Application Factory dan Blueprint saat aplikasi mulai berkembang.

Dengan bekal pengetahuan ini, Anda sudah siap untuk membangun berbagai jenis aplikasi web, mulai dari REST API, dashboard admin, hingga aplikasi social media skala menengah.


Catatan: Panduan ini disusun berdasarkan praktik terbaik dan pola pengembangan yang umum digunakan dalam ekosistem Flask. Selalu sesuaikan struktur dan pilihan ekstensi dengan kebutuhan proyek Anda. Untuk referensi lebih lanjut, dokumentasi resmi Flask dan ekstensi-ekstensi populer sangat direkomendasikan.


Thanks for reading!

Pengembangan Web dengan Flask: Dari Dasar hingga Aplikasi Skala Menengah

Sun Jun 07 2026
862 words · 7 minutes