The Curious Engineer

All blogs / Python

Miguel Grinberg's Blog

blog.miguelgrinberg.com

miguelgrinberg.com

PythonWeb development

Posts
269 from 21 Apr 2012 to 27 Oct 2026
Posting
weekly (25 in the last year)
Kind
personal blog
Feed
https://blog.miguelgrinberg.com/feed

2026 23

  1. I'm Full-Time Open Source Developer Now
  2. How fast is Python 3.15?
  3. You Should be Using Rootless Containers
  4. Forgejo hack #2: Integration with Read The Docs
  5. Forgejo hack #1: How to set a starting issue and pull request number
  6. I Am Not a Reverse Centaur
  7. SQLAlchemy 2 In Practice - Solutions to the Exercises
  8. SQLAlchemy 2 In Practice - Chapter 8: SQLAlchemy and the Web
  9. SQLAlchemy 2 In Practice - Chapter 7: Asynchronous SQLAlchemy
  10. How Bitwarden Encrypts and Decrypts Secrets
  11. SQLAlchemy 2 In Practice - Chapter 6: A Page Analytics Solution
  12. SQLAlchemy 2 In Practice - Chapter 5 - Advanced Many-To-Many Relationships
  13. SQLAlchemy 2 In Practice - Chapter 4 - Many-To-Many Relationships
  14. SQLAlchemy 2 In Practice - Chapter 3 - One-To-Many Relationships
  15. SQLAlchemy 2 In Practice - Chapter 2 - Database Tables
  16. SQLAlchemy 2 In Practice - Chapter 1 - Database Setup
  17. Introduction to SQLAlchemy 2 In Practice
  18. How to Host your Own Email Server
  19. LLM Use in the Python Source Code
  20. My Courses Site is Moving to a New Home
  21. Date Arithmetic in Bash
  22. How to Add a Quick Interactive Map to your Website
  23. A Year In Review: Flask in 2025

2025 12

  1. CSRF Protection without Tokens or Hidden Form Fields
  2. How to Securely Store Secrets in Environment Variables
  3. Python 3.14 performance
  4. Benchmarking MicroPython
  5. coding with LLMs would not work for me
  6. Create a React + Flask Project in 2025
  7. Font Ligatures for your Code Editor and Terminal
  8. A Review of The Quick Python Book, Fourth Edition
  9. Dynamic Forms with Flask
  10. Encryption at Rest with SQLAlchemy
  11. Using Free Let's Encrypt SSL Certificates in 2025
  12. last year

2024 4

  1. "Is Python Really That Slow?"
  2. The Ultimate Guide to Error Handling in Python
  3. How LLMs Work, Explained Without Math
  4. How To Add Dark Mode Support To Your Website

2023 35

  1. Eliza-GPT: The Classic ELIZA Chatbot Running On OpenAI's Chat Completions API
  2. Microdot: Yet Another Python Web Framework
  3. The Flask Mega-Tutorial, Part XV: A Better Application Structure
  4. The Flask Mega-Tutorial, Part XVI: Full-Text Search
  5. The Flask Mega-Tutorial, Part XVII: Deployment on Linux
  6. The Flask Mega-Tutorial, Part XVIII: Deployment on Heroku
  7. The Flask Mega-Tutorial, Part XIX: Deployment on Docker Containers
  8. The Flask Mega-Tutorial, Part XX: Some JavaScript Magic
  9. The Flask Mega-Tutorial, Part XXI: User Notifications
  10. The Flask Mega-Tutorial, Part XXII: Background Jobs
  11. The Flask Mega-Tutorial, Part XXIII: Application Programming Interfaces (APIs)
  12. Announcing the Flask Mega-Tutorial, 2024 Edition
  13. Flask Mega-Tutorial
  14. The Flask Mega-Tutorial, Part V: User Logins
  15. The Flask Mega-Tutorial, Part VI: Profile Page and Avatars
  16. The Flask Mega-Tutorial, Part VII: Error Handling
  17. The Flask Mega-Tutorial, Part VIII: Followers
  18. The Flask Mega-Tutorial, Part IX: Pagination
  19. The Flask Mega-Tutorial, Part X: Email Support
  20. The Flask Mega-Tutorial, Part XI: Facelift
  21. The Flask Mega-Tutorial, Part XII: Dates and Times
  22. The Flask Mega-Tutorial, Part XIII: I18n and L10n
  23. The Flask Mega-Tutorial, Part XIV: Ajax
  24. The Flask Mega-Tutorial, Part II: Templates
  25. The Flask Mega-Tutorial, Part III: Web Forms
  26. The Flask Mega-Tutorial, Part IV: Database
  27. It's Time For A Change: datetime.utcnow() Is Now Deprecated
  28. Some More To Talk About Flask
  29. We Have To Talk About Flask
  30. Building a Toy Programming Language in Python
  31. Building a Toy Programming Language in Python, Part 2
  32. Goodbye, Twilio
  33. OAuth Authentication with Flask in 2023
  34. Create a MySQL Database using Docker
  35. What's New in SQLAlchemy 2.0?

2022 14

  1. The React Mega-Tutorial, Chapter 12: Production Builds
  2. The React Mega-Tutorial, Chapter 11: Automated Testing
  3. The React Mega-Tutorial, Chapter 10: Memoization
  4. The React Mega-Tutorial, Chapter 9: Application Features
  5. The React Mega-Tutorial, Chapter 8: Authentication
  6. The React Mega-Tutorial, Chapter 7: Forms and Validation
  7. The React Mega-Tutorial, Chapter 6: Building an API Client
  8. Beautiful Flask Tables, Part 2
  9. The React Mega-Tutorial, Chapter 5: Connecting to a Back End
  10. The React Mega-Tutorial, Chapter 4: Routing and Page Navigation
  11. The React Mega-Tutorial, Chapter 3: Working with Components
  12. The React Mega-Tutorial, Chapter 2: Hello, React!
  13. Introducing the React Mega-Tutorial
  14. The React Mega-Tutorial, Chapter 1: Modern JavaScript

2021 13

  1. API Authentication with Tokens
  2. Using JavaScript-style async promises in Python
  3. Add a WebSocket Route to your Flask 2.x Application
  4. Accept Credit Card Payments in Flask with Stripe Checkout
  5. Optimizing Slow SQL Queries
  6. How to Write Unit Tests in Python, Part 3: Web Applications
  7. Flask Mega-Tutorial Update: Flask 2.0 and more!
  8. Beautiful Interactive Tables for your Flask Templates
  9. How to Dockerize a React + Flask Project
  10. Dynamically Update Your Flask Web Pages Using Turbo-Flask
  11. How to Write Unit Tests in Python, Part 2: Game of Life
  12. How to Write Unit Tests in Python, Part 1: Fizz Buzz
  13. Learn Socket.IO with Python and JavaScript in 90 Minutes!

2020 19

  1. Learn React in 90 Minutes!
  2. Why do we pass __name__ to the Flask class?
  3. How to Kill a Python Thread
  4. Ignore All Web Performance Benchmarks, Including This One
  5. Sync vs. Async Python: What is the Difference?
  6. How to Deploy a React-Router + Flask Application
  7. Video: How To Fix an Internal Server Error in Flask
  8. Fixing ALTER TABLE errors with Flask-Migrate and SQLite
  9. Run Your Flask Regularly Scheduled Jobs with Cron
  10. Handling File Uploads With Flask
  11. Access Localhost From Your Phone Or From Anywhere In The World
  12. Introduction to JavaScript Arrow Functions
  13. Video: Using Trailing Commas in Python
  14. Introduction to JavaScript Promises
  15. Video: Introduction to Terminal Multiplexing with Tmux
  16. Video: Setting Up Vim to Work with Python Applications
  17. How To Add Flask-Migrate To An Existing Project
  18. How to deploy a react flask project
  19. React + Flask project

2019 19

  1. The Ultimate Guide to Python Decorators, Part III: Decorators with Arguments
  2. Video: MicroPython Heats My Home
  3. The Ultimate Guide to Python Decorators, Part II: Altering Function Behavior
  4. Video: Four SQLAlchemy Tips
  5. Video: How to Measure Web App Performance
  6. MicroPython and the Internet of Things, Part VI: Working with a Screen
  7. Setting Up a Flask Application in Visual Studio Code
  8. MicroPython and the Internet of Things, Part V: Temperature and Humidity
  9. MicroPython and the Internet of Things, Part IV: Wi-Fi and the Cloud
  10. MicroPython and the Internet of Things, Part III: Building a MicroPython Application
  11. The Ultimate Guide to Python Decorators, Part I: Function Registration
  12. MicroPython and the Internet of Things, Part II: Hello, MicroPython!
  13. MicroPython and the Internet of Things, Part I: Welcome
  14. Introducing My MicroPython Tutorial
  15. Running a Flask Application as a Service with Systemd
  16. Nested Queries with SQLAlchemy ORM
  17. Unit Testing Applications that use Flask-Login and Flask-SocketIO
  18. How To Make Python Wait
  19. SSH Security For Teams

2018 26

  1. Coding on a Chromebook Revisited
  2. Setting Up a Flask Application in PyCharm
  3. JSON Web Tokens with Public Key Signatures
  4. Flask Webcast #3: Circular Dependencies
  5. The Flask Mega-Tutorial Part XXIII: Application Programming Interfaces (APIs) (2018)
  6. The Flask Mega-Tutorial Part XXII: Background Jobs (2018)
  7. The Flask Mega-Tutorial Part XXI: User Notifications (2018)
  8. Flask Webcast #2: Request and Application Contexts
  9. The Flask Mega-Tutorial Part XX: Some JavaScript Magic (2018)
  10. The Flask Mega-Tutorial Part XIX: Deployment on Docker Containers (2018)
  11. The Flask Mega-Tutorial Part XVIII: Deployment on Heroku (2018)
  12. The Flask Mega-Tutorial Part XVII: Deployment on Linux (2018)
  13. Flask Webcast #1: Intro to Flask
  14. The Flask Mega-Tutorial Part XVI: Full-Text Search (2018)
  15. The Flask Mega-Tutorial Part XV: A Better Application Structure (2018)
  16. The Flask Mega-Tutorial Part XIV: Ajax (2018)
  17. The Flask Mega-Tutorial Part XIII: I18n and L10n (2018)
  18. The Flask Mega-Tutorial Part XII: Dates and Times (2018)
  19. The New Way To Generate Secure Tokens in Python
  20. The Flask Mega-Tutorial Part XI: Facelift (2018)
  21. The Flask Mega-Tutorial Part X: Email Support (2018)
  22. The Flask Mega-Tutorial Part IX: Pagination (2018)
  23. The Flask Mega-Tutorial Part VIII: Followers (2018)
  24. The Flask Mega-Tutorial Part VII: Error Handling (2018)
  25. The Flask Mega-Tutorial Part VI: Profile Page and Avatars (2018)
  26. The Flask Mega-Tutorial Part V: User Logins (2018)

2017 18

  1. The Flask Mega-Tutorial Part IV: Database (2018)
  2. The Flask Mega-Tutorial Part III: Web Forms (2018)
  3. The Flask Mega-Tutorial Part II: Templates (2018)
  4. The Flask Mega-Tutorial Part I: Hello, World! (2018)
  5. Implementing User Comments with SQLAlchemy
  6. setting up a cheap Chromebook for web development
  7. Serverless Deployments of Python APIs
  8. Flask Video Streaming Revisited
  9. Using Headless Chrome with Selenium
  10. Continue reading this post...
  11. Cookie Security for Flask Applications
  12. The Flask Mega-Tutorial Kickstarter
  13. Flask-SocketIO and the User Session
  14. Handling Authentication Secrets in the Browser
  15. Migrating from Flask-Script to the New Flask CLI
  16. Running Your Flask Application Over HTTPS
  17. Visual Studio Code for Python Developers
  18. Unit Testing AsyncIO Code

2016 7

  1. How to Retry with Class
  2. Implementing the "Soft Delete" Pattern with Flask and SQLAlchemy
  3. How Secure Is The Flask User Session?
  4. Hey Miguel, What Are You Working On These Days?
  5. "Flask At Scale" tutorial at PyCon 2016 in Portland
  6. Error Handling in the Real World
  7. Resolving Database Schema Conflicts

2015 8

  1. Customizing the Flask Response Class
  2. Web Development on Windows Does Not Need To Suck
  3. Flask-SocketIO needs your help!
  4. Celery and the Flask Application Factory Pattern
  5. My PyCon 2015 Sessions
  6. About My "Flask Workshop" Tutorial at PyCon 2015
  7. Two Factor Authentication with Flask
  8. Using Celery With Flask

2014 10

  1. tutorial
  2. Video Streaming with Flask
  3. The Flask Mega-Tutorial: Now with Python 3 Support
  4. Using Flask-Babel with Flask 0.10
  5. The Rackspace Cloud API
  6. My Flask Web Development Book is Out!
  7. Watch Live Video of Earth on your Raspberry Pi
  8. Easy Web Scraping with Python
  9. Easy WebSockets with Flask and Gevent
  10. Fun With The Arduino Esplora: A Digital Picture Frame

2013 31

  1. Flask Book and PyCon Update
  2. RESTful Authentication with Flask
  3. Flask-PageDown: Markdown Editor Extension for Flask-WTF
  4. Flask-Moment: Flask and Jinja2 Integration with moment.js
  5. How to build and run MJPG-Streamer on the Raspberry Pi
  6. Flask-Migrate: Alembic database migration wrapper for Flask
  7. The Package Dependency Blues
  8. Designing a RESTful API using Flask-RESTful
  9. Web Development With Flask
  10. Night Sky Photography
  11. Flask-Runner: Command Line Options for Flask
  12. How To Teach A Young Kid To Play Chess
  13. Writing a Javascript REST client
  14. streaming video from the Raspberry Pi using MJPG-Streamer
  15. Designing a restful api with python and flask
  16. Take 3D Pictures With Your Canon DSLR and Magic Lantern
  17. The Flask Mega-Tutorial, Part XVIII: Deployment on the Heroku Cloud (2012)
  18. The Flask Mega-Tutorial, Part XVII: Deployment on Linux (even on the Raspberry Pi!) (2012)
  19. Building an Arduino Robot, Part VI: Remote Control
  20. A cheap Bluetooth serial port for your Raspberry Pi
  21. The Flask Mega-Tutorial, Part XVI: Debugging, Testing and Profiling (2012)
  22. Building an Arduino Robot, Part V: Avoiding Obstacles
  23. The Flask Mega-Tutorial, Part XV: Ajax (2012)
  24. web scraping using Node.js
  25. The Flask Mega-Tutorial, Part XIV: I18n and L10n (2012)
  26. Building an Arduino Robot, Part IV: A (Not So) Basic Robot Firmware
  27. Netflix Gems: Buried
  28. Building an Arduino Robot, Part III: Assembling the Robot
  29. Building an Arduino Robot, Part II: Programming the Arduino
  30. rendering dates and times
  31. The Flask Mega-Tutorial, Part XIII: Dates and Times (2012)

2012 30

  1. Arduino based robot vehicle project
  2. The Flask Mega-Tutorial, Part XII: Facelift (2012)
  3. The Flask Mega-Tutorial, Part XI: Email Support (2012)
  4. The Quick & Dirty HDR Tutorial (With Free Software!)
  5. The School Picture Challenge
  6. The Flask Mega-Tutorial, Part X: Full Text Search (2012)
  7. The Flask Mega-Tutorial, Part IX: Pagination (2012)
  8. Balancing the Rhino Steady Camera Stabilizer, Case Study: Smartphone
  9. Netflix Gems: The Red Violin (Le Violon Rouge)
  10. The Flask Mega-Tutorial, Part VIII: Followers, Contacts And Friends (2012)
  11. Balancing the Rhino Steady Camera Stabilizer, Case Study: Point & Shoot
  12. Netflix Gems: Timecrimes (Los Cronocrímenes)
  13. Netflix Gems: Castaway On The Moon
  14. Netflix Gems: The Double Hour (La Doppia Ora)
  15. lightweight camcorder
  16. The Flask Mega-Tutorial, Part VII: Unit Testing (2012)
  17. lightweight DSLR
  18. first article
  19. medium size DSLR
  20. The Flask Mega-Tutorial, Part VI: Profile Page And Avatars (2012)
  21. Using The Sky As A Softbox - With A Twist
  22. Simple Project Management, Or How To Finish Your Project Before The World Comes To An End
  23. The Flask Mega-Tutorial, Part V: User Logins (2012)
  24. The Flask Mega-Tutorial, Part IV: Database (2012)
  25. The Flask Mega-Tutorial, Part III: Web Forms (2012)
  26. The Flask Mega-Tutorial, Part II: Templates (2012)
  27. The Flask Mega-Tutorial, Part I: Hello, World! (2012)
  28. Increasing The Dynamic Range Of Your Pictures With Enfuse
  29. review their code
  30. About This Blog