Flask — Micro Framework

Minimal, flexible, ideal for APIs and small apps.

Setup

  pip install flask
  
  from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route('/')
def home():
    return "Hello, Flask!"

@app.route('/api/users', methods=['GET', 'POST'])
def users():
    if request.method == 'POST':
        data = request.get_json()
        return jsonify({"created": data}), 201
    return jsonify([{"id": 1, "name": "Alice"}])

if __name__ == '__main__':
    app.run(debug=True)
  

Templates (Jinja2)

  from flask import render_template

@app.route('/profile/<name>')
def profile(name):
    return render_template('profile.html', name=name)
  

Django — Full-Stack Framework

Batteries included: ORM, admin, auth, forms, migrations.

Setup

  pip install django
django-admin startproject mysite
cd mysite
python manage.py startapp blog
python manage.py migrate
python manage.py runserver
  

Models

  # blog/models.py
from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)
    body = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title
  
  python manage.py makemigrations
python manage.py migrate
  

Views and URLs

  # blog/views.py
from django.shortcuts import render
from .models import Post

def post_list(request):
    posts = Post.objects.all().order_by('-created_at')
    return render(request, 'blog/list.html', {'posts': posts})
  
  # blog/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.post_list, name='post_list'),
]
  

Flask vs Django

Aspect Flask Django
Size Micro, minimal Full-stack
Learning curve Gentle Steeper
Flexibility High Opinionated
Best for APIs, microservices CMS, enterprise apps
ORM SQLAlchemy (add-on) Built-in

REST APIs

  # Flask + Flask-RESTful or Django REST Framework
pip install djangorestframework

# DRF serializer + viewset pattern for production APIs
  

Both frameworks power production websites worldwide — choose based on project scope and team preference.