🌐

Flask Web Development

Build modern web applications

INTERMEDIATE

Flask Web Development

Create full-stack web applications with routing, templates, forms, and databases. Power used by Netflix, LinkedIn, and Reddit. Lightweight, flexible, Python-native.

Flask Routing Fundamentals

Flask maps URLs to Python functions using @app.route() decorators. Create dynamic web pages with URL parameters and HTTP methods.

URL Decorator Method
/ @app.route('/') GET (Home)
/user/123 @app.route('/user/') GET (Dynamic)
/login @app.route('/login', methods=['POST']) POST (Form)
/api/users @app.route('/api/users', methods=['GET', 'POST']) API (REST)

Hello World Flask App

🚀 python app.pyhttp://localhost:5000
http://localhost:5000

🏠 Home Page

Welcome to Flask!

📊 Status: Running
🛠️ Framework: Flask 2.3+
🔥 Ready for production
from flask import Flask app = Flask(__name__) @app.route('/') def home(): return '''

Welcome to Flask! 🚀

Server running at localhost:5000

''' @app.route('/about') def about(): return '

About Flask

Lightweight Python web framework

' @app.route('/user/') def user_profile(user_id): return f'

User Profile: {user_id}

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

HTTP Methods (REST)

GET - Read Data

@app.route('/api/users', methods=['GET']) def get_users(): users = ['Alice', 'Bob', 'Charlie'] return {'users': users, 'count': len(users)}

POST - Create Data

from flask import request @app.route('/api/users', methods=['POST']) def create_user(): data = request.json return {'message': 'User created', 'user': data}, 201

PUT - Update Data

@app.route('/api/users/', methods=['PUT']) def update_user(id): data = request.json return {'message': f'User {id} updated'}

DELETE - Remove Data

@app.route('/api/users/', methods=['DELETE']) def delete_user(id): return {'message': f'User {id} deleted'}, 200

Jinja2 Templates

http://localhost:5000/users

👥 Users Page

Alice Smith alice@email.com
Bob Johnson bob@email.com
from flask import Flask, render_template app = Flask(__name__) @app.route('/users') def users(): user_data = [ {'name': 'Alice Smith', 'email': 'alice@email.com'}, {'name': 'Bob Johnson', 'email': 'bob@email.com'} ] return render_template('users.html', users=user_data) # templates/users.html """ Users

Users ({{ users|length }})

{% for user in users %}

{{ user.name }}

{{ user.email }}
{% endfor %} """

Forms & Validation

from flask import Flask, request, render_template, redirect, url_for, flash from werkzeug.security import generate_password_hash app = Flask(__name__) app.secret_key = 'dev-key' @app.route('/register', methods=['GET', 'POST']) def register(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] if len(password) < 6: flash('Password must be 6+ characters') return render_template('register.html') # Save user (database) hashed = generate_password_hash(password) flash('Registration successful!') return redirect(url_for('login')) return render_template('register.html')

📝 register.html Template





{% with messages = get_flashed_messages() %} {% if messages %}
{{ messages[0] }}
{% endif %} {% endwith %}

Database Integration

from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db' db = SQLAlchemy(app) class Post(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(100), nullable=False) content = db.Column(db.Text, nullable=False) date = db.Column(db.DateTime, default=datetime.utcnow) @app.route('/posts') def posts(): all_posts = Post.query.all() return render_template('posts.html', posts=all_posts) @app.route('/create', methods=['POST']) def create_post(): title = request.form['title'] content = request.form['content'] post = Post(title=title, content=content) db.session.add(post) db.session.commit() return redirect(url_for('posts'))

Production Features

Blueprints (Modular Apps)

# auth/blueprint.py from flask import Blueprint auth_bp = Blueprint('auth', __name__) @auth_bp.route('/login') def login(): return 'Login page' # app.py app.register_blueprint(auth_bp, url_prefix='/auth') # Now: /auth/login

Environment Config

import os from dotenv import load_dotenv load_dotenv() app.config['SECRET_KEY'] = os.getenv('SECRET_KEY') app.config['DATABASE_URL'] = os.getenv('DATABASE_URL') class Config: DEBUG = os.getenv('FLASK_DEBUG') == 'True' SQLALCHEMY_TRACK_MODIFICATIONS = False

Deployment

# requirements.txt """ Flask==2.3.3 Flask-SQLAlchemy==3.0.5 python-dotenv==1.0.0 Werkzeug==2.3.7 """ # Procfile (Heroku) web: gunicorn app:app # runtime.txt python-3.11.5 # wsgi.py (production) from app import app if __name__ == "__main__": app.run()
Heroku
Free tier available
Vercel
Serverless
Docker
Production ready

Production Projects

1. Blog Platform

CRUD posts, user auth, comments, search, pagination

2. Task Manager API

REST API + database + authentication + frontend

3. URL Shortener

Custom short URLs, analytics, QR codes, admin dashboard

4. E-commerce Store

Products, cart, checkout, payments, admin panel

Full-Stack Web Developer!

🌐 Production Web Applications:

📱 SaaS Dashboards
Analytics, users, billing
🛒 E-commerce Sites
Products, cart, payments
📊 REST APIs
Mobile + frontend integration
⚙️ Admin Panels
CRUD, reports, management
💼 Production Deployments
Heroku, Docker, AWS

Deploy full-stack web applications worldwide! 🚀