⚙️ Flask Setup & Basics
# Install Flask
pip install flask
# hello.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def home():
return "Hello, Flask!"
if __name__ == "__main__":
app.run(debug=True)
🔗 Routing
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "Home Page"
@app.route("/about")
def about():
return "About Page"
# Dynamic routes
@app.route("/user/<username>")
def user(username):
return f"Hello, {username}!"
🎨 Templates (Jinja2)
from flask import render_template
@app.route("/hello/<name>")
def hello(name):
return render_template("hello.html", name=name)
# templates/hello.html
<h1>Hello, {{ name }}!</h1>
{% if name == "Maxon" %}
<p>Welcome back, admin!</p>
{% endif %}
🖼️ Static Files
# Directory structure
/project
/static
style.css
/templates
index.html
# templates/index.html
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
<img src="{{ url_for('static', filename='logo.png') }}" alt="Logo">
📩 Forms & Request Data
from flask import request
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == "POST":
username = request.form["username"]
password = request.form["password"]
return f"Logged in as {username}"
return '''
<form method="post">
<input name="username">
<input name="password" type="password">
<button type="submit">Login</button>
</form>
'''
↪️ Redirects & URL Building
from flask import redirect, url_for
@app.route("/admin")
def admin():
return "Admin Page"
@app.route("/user/<name>")
def user(name):
if name == "admin":
return redirect(url_for("admin"))
return f"Welcome {name}"
🔐 Sessions
from flask import session
app.secret_key = "supersecretkey"
@app.route("/set/<name>")
def set_session(name):
session["user"] = name
return f"Session set for {name}"
@app.route("/get")
def get_session():
return f"Logged in as {session.get('user')}"
🗄️ Database with SQLAlchemy
pip install flask_sqlalchemy
from flask_sqlalchemy import SQLAlchemy
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///site.db"
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True, nullable=False)
# Create DB
with app.app_context():
db.create_all()
# Insert Data
user = User(username="Maxon")
db.session.add(user)
db.session.commit()
# Query
User.query.all()
🌐 REST API (Flask-RESTful)
pip install flask-restful
from flask_restful import Resource, Api
api = Api(app)
class Hello(Resource):
def get(self):
return {"message": "Hello, API"}
api.add_resource(Hello, "/api")
# Run: GET /api → {"message": "Hello, API"}
🔑 Authentication (Flask-Login)
pip install flask-login
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user
login_manager = LoginManager(app)
login_manager.login_view = "login"
class User(UserMixin):
id = 1
username = "admin"
password = "1234"
users = {"admin": User()}
@login_manager.user_loader
def load_user(user_id):
return users.get("admin")
@app.route("/login")
def login():
user = users["admin"]
login_user(user)
return "Logged in!"
@app.route("/dashboard")
@login_required
def dashboard():
return f"Welcome {current_user.username}"
💡 Pro Tips
# Run with auto reload
flask run --debug
# Environment Variables
export FLASK_APP=hello.py
export FLASK_ENV=development
# Virtual Environment
python -m venv venv
source venv/bin/activate # (Linux/Mac)
venv\Scripts\activate # (Windows)
# Deploy with Gunicorn
pip install gunicorn
gunicorn hello:app