blog.miguelgrinberg.com
Open in
urlscan Pro
138.68.45.120
Public Scan
Submitted URL: http://blog.miguelgrinberg.com/
Effective URL: https://blog.miguelgrinberg.com/
Submission: On December 20 via api from US — Scanned from DE
Effective URL: https://blog.miguelgrinberg.com/
Submission: On December 20 via api from US — Scanned from DE
Form analysis
84 forms found in the DOM/author/Miguel%20Grinberg
<form action="/author/Miguel%20Grinberg">
<input type="submit" class="btn btn-outline-danger btn-sm" value="Miguel Grinberg">
</form>
/category/Python
<form action="/category/Python">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Python">
</form>
/category/Programming
<form action="/category/Programming">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Programming">
</form>
/category/Flask
<form action="/category/Flask">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Flask">
</form>
/author/Miguel%20Grinberg
<form action="/author/Miguel%20Grinberg">
<input type="submit" class="btn btn-outline-danger btn-sm" value="Miguel Grinberg">
</form>
/category/Flask
<form action="/category/Flask">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Flask">
</form>
/category/Python
<form action="/category/Python">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Python">
</form>
/category/REST
<form action="/category/REST">
<input type="submit" class="btn btn-outline-primary btn-sm" value="REST">
</form>
/category/Programming
<form action="/category/Programming">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Programming">
</form>
/category/Authentication
<form action="/category/Authentication">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Authentication">
</form>
/author/Miguel%20Grinberg
<form action="/author/Miguel%20Grinberg">
<input type="submit" class="btn btn-outline-danger btn-sm" value="Miguel Grinberg">
</form>
/category/Python
<form action="/category/Python">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Python">
</form>
/category/JavaScript
<form action="/category/JavaScript">
<input type="submit" class="btn btn-outline-primary btn-sm" value="JavaScript">
</form>
/category/Flask
<form action="/category/Flask">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Flask">
</form>
/category/Programming
<form action="/category/Programming">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Programming">
</form>
/author/Miguel%20Grinberg
<form action="/author/Miguel%20Grinberg">
<input type="submit" class="btn btn-outline-danger btn-sm" value="Miguel Grinberg">
</form>
/category/Python
<form action="/category/Python">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Python">
</form>
/category/JavaScript
<form action="/category/JavaScript">
<input type="submit" class="btn btn-outline-primary btn-sm" value="JavaScript">
</form>
/category/Programming
<form action="/category/Programming">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Programming">
</form>
/category/Flask
<form action="/category/Flask">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Flask">
</form>
/author/Miguel%20Grinberg
<form action="/author/Miguel%20Grinberg">
<input type="submit" class="btn btn-outline-danger btn-sm" value="Miguel Grinberg">
</form>
/category/Flask
<form action="/category/Flask">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Flask">
</form>
/category/Python
<form action="/category/Python">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Python">
</form>
/category/Programming
<form action="/category/Programming">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Programming">
</form>
/category/JavaScript
<form action="/category/JavaScript">
<input type="submit" class="btn btn-outline-primary btn-sm" value="JavaScript">
</form>
/author/Miguel%20Grinberg
<form action="/author/Miguel%20Grinberg">
<input type="submit" class="btn btn-outline-danger btn-sm" value="Miguel Grinberg">
</form>
/category/Flask
<form action="/category/Flask">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Flask">
</form>
/category/Python
<form action="/category/Python">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Python">
</form>
/category/Programming
<form action="/category/Programming">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Programming">
</form>
/category/Docker
<form action="/category/Docker">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Docker">
</form>
/author/Miguel%20Grinberg
<form action="/author/Miguel%20Grinberg">
<input type="submit" class="btn btn-outline-danger btn-sm" value="Miguel Grinberg">
</form>
/category/Python
<form action="/category/Python">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Python">
</form>
/category/Flask
<form action="/category/Flask">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Flask">
</form>
/category/Programming
<form action="/category/Programming">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Programming">
</form>
/category/Cloud
<form action="/category/Cloud">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Cloud">
</form>
/author/Miguel%20Grinberg
<form action="/author/Miguel%20Grinberg">
<input type="submit" class="btn btn-outline-danger btn-sm" value="Miguel Grinberg">
</form>
/category/Raspberry%20Pi
<form action="/category/Raspberry%20Pi">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Raspberry Pi">
</form>
/category/Cloud
<form action="/category/Cloud">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Cloud">
</form>
/category/Python
<form action="/category/Python">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Python">
</form>
/category/Flask
<form action="/category/Flask">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Flask">
</form>
/category/Programming
<form action="/category/Programming">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Programming">
</form>
/author/Miguel%20Grinberg
<form action="/author/Miguel%20Grinberg">
<input type="submit" class="btn btn-outline-danger btn-sm" value="Miguel Grinberg">
</form>
/category/Python
<form action="/category/Python">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Python">
</form>
/category/Flask
<form action="/category/Flask">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Flask">
</form>
/category/Programming
<form action="/category/Programming">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Programming">
</form>
/category/Database
<form action="/category/Database">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Database">
</form>
/author/Miguel%20Grinberg
<form action="/author/Miguel%20Grinberg">
<input type="submit" class="btn btn-outline-danger btn-sm" value="Miguel Grinberg">
</form>
/category/Python
<form action="/category/Python">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Python">
</form>
/category/Flask
<form action="/category/Flask">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Flask">
</form>
/category/Programming
<form action="/category/Programming">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Programming">
</form>
/category/AWS
<form action="/category/AWS">
<input type="submit" class="btn btn-outline-primary btn-sm" value="AWS"> <small><em>1</em></small>
</form>
/category/Arduino
<form action="/category/Arduino">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Arduino"> <small><em>7</em></small>
</form>
/category/Authentication
<form action="/category/Authentication">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Authentication"> <small><em>10</em></small>
</form>
/category/Blog
<form action="/category/Blog">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Blog"> <small><em>1</em></small>
</form>
/category/C++
<form action="/category/C++">
<input type="submit" class="btn btn-outline-primary btn-sm" value="C++"> <small><em>5</em></small>
</form>
/category/Cloud
<form action="/category/Cloud">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Cloud"> <small><em>10</em></small>
</form>
/category/Database
<form action="/category/Database">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Database"> <small><em>22</em></small>
</form>
/category/Docker
<form action="/category/Docker">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Docker"> <small><em>5</em></small>
</form>
/category/Filmmaking
<form action="/category/Filmmaking">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Filmmaking"> <small><em>6</em></small>
</form>
/category/Flask
<form action="/category/Flask">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Flask"> <small><em>126</em></small>
</form>
/category/Games
<form action="/category/Games">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Games"> <small><em>1</em></small>
</form>
/category/HTML5
<form action="/category/HTML5">
<input type="submit" class="btn btn-outline-primary btn-sm" value="HTML5"> <small><em>1</em></small>
</form>
/category/Heroku
<form action="/category/Heroku">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Heroku"> <small><em>1</em></small>
</form>
/category/IoT
<form action="/category/IoT">
<input type="submit" class="btn btn-outline-primary btn-sm" value="IoT"> <small><em>8</em></small>
</form>
/category/JavaScript
<form action="/category/JavaScript">
<input type="submit" class="btn btn-outline-primary btn-sm" value="JavaScript"> <small><em>34</em></small>
</form>
/category/MicroPython
<form action="/category/MicroPython">
<input type="submit" class="btn btn-outline-primary btn-sm" value="MicroPython"> <small><em>8</em></small>
</form>
/category/Microservices
<form action="/category/Microservices">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Microservices"> <small><em>2</em></small>
</form>
/category/Movie%20Reviews
<form action="/category/Movie%20Reviews">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Movie Reviews"> <small><em>5</em></small>
</form>
/category/OpenStack
<form action="/category/OpenStack">
<input type="submit" class="btn btn-outline-primary btn-sm" value="OpenStack"> <small><em>1</em></small>
</form>
/category/Personal
<form action="/category/Personal">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Personal"> <small><em>3</em></small>
</form>
/category/Photography
<form action="/category/Photography">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Photography"> <small><em>7</em></small>
</form>
/category/Product%20Reviews
<form action="/category/Product%20Reviews">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Product Reviews"> <small><em>2</em></small>
</form>
/category/Programming
<form action="/category/Programming">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Programming"> <small><em>184</em></small>
</form>
/category/Project%20Management
<form action="/category/Project%20Management">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Project Management"> <small><em>1</em></small>
</form>
/category/Python
<form action="/category/Python">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Python"> <small><em>167</em></small>
</form>
/category/REST
<form action="/category/REST">
<input type="submit" class="btn btn-outline-primary btn-sm" value="REST"> <small><em>7</em></small>
</form>
/category/Rackspace
<form action="/category/Rackspace">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Rackspace"> <small><em>1</em></small>
</form>
/category/Raspberry%20Pi
<form action="/category/Raspberry%20Pi">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Raspberry Pi"> <small><em>8</em></small>
</form>
/category/React
<form action="/category/React">
<input type="submit" class="btn btn-outline-primary btn-sm" value="React"> <small><em>18</em></small>
</form>
/category/Robotics
<form action="/category/Robotics">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Robotics"> <small><em>6</em></small>
</form>
/category/Security
<form action="/category/Security">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Security"> <small><em>12</em></small>
</form>
/category/Video
<form action="/category/Video">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Video"> <small><em>22</em></small>
</form>
/category/Webcast
<form action="/category/Webcast">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Webcast"> <small><em>3</em></small>
</form>
/category/Windows
<form action="/category/Windows">
<input type="submit" class="btn btn-outline-primary btn-sm" value="Windows"> <small><em>1</em></small>
</form>
Text Content
miguelgrinberg.com * Home * My Courses and Books * Consulting * About Me * ANNOUNCING THE FLASK MEGA-TUTORIAL, 2024 EDITION POSTED BY ON DECEMBER 3, 2023 UNDER Today I'm super-excited to share that I have made available a major update to the Flask Mega-Tutorial, which I'm calling the "2024 Edition". In the following sections I'll re-introduce the tutorial in case you have not seen it before, and I'll also go over the changes and improvements in this revised edition. Continue reading this post... 17 comments THE FLASK MEGA-TUTORIAL, PART XXIII: APPLICATION PROGRAMMING INTERFACES (APIS) POSTED BY ON DECEMBER 3, 2023 UNDER This is the twenty third and last installment of the Flask Mega-Tutorial series, in which I'm going to tell you how to extend microblog with an application programming interface (or API) that clients can use to work with the application in a more direct way than the traditional web browser workflow. Continue reading this post... 4 comments THE FLASK MEGA-TUTORIAL, PART XXII: BACKGROUND JOBS POSTED BY ON DECEMBER 3, 2023 UNDER This is the twenty second installment of the Flask Mega-Tutorial series, in which I'm going to tell you how to create background jobs that run independently of the web server. Continue reading this post... No comments yet THE FLASK MEGA-TUTORIAL, PART XXI: USER NOTIFICATIONS POSTED BY ON DECEMBER 3, 2023 UNDER This is the twenty first installment of the Flask Mega-Tutorial series, in which I'm going to add a private message feature, along with user notifications that appear in the navigation bar without the need to refresh the page. Continue reading this post... No comments yet THE FLASK MEGA-TUTORIAL, PART XX: SOME JAVASCRIPT MAGIC POSTED BY ON DECEMBER 3, 2023 UNDER This is the twentieth installment of the Flask Mega-Tutorial series, in which I'm going to add a nice popup when you hover your mouse over a user's nickname. Continue reading this post... No comments yet THE FLASK MEGA-TUTORIAL, PART XIX: DEPLOYMENT ON DOCKER CONTAINERS POSTED BY ON DECEMBER 3, 2023 UNDER This is the nineteenth installment of the Flask Mega-Tutorial series, in which I'm going to deploy Microblog to the Docker container platform. Continue reading this post... 2 comments THE FLASK MEGA-TUTORIAL, PART XVIII: DEPLOYMENT ON HEROKU POSTED BY ON DECEMBER 3, 2023 UNDER This is the eighteenth installment of the Flask Mega-Tutorial series, in which I'm going to deploy Microblog to the Heroku cloud platform. Continue reading this post... 2 comments THE FLASK MEGA-TUTORIAL, PART XVII: DEPLOYMENT ON LINUX POSTED BY ON DECEMBER 3, 2023 UNDER This is the seventeenth installment of the Flask Mega-Tutorial series, in which I'm going to deploy Microblog to a Linux server. Continue reading this post... No comments yet THE FLASK MEGA-TUTORIAL, PART XVI: FULL-TEXT SEARCH POSTED BY ON DECEMBER 3, 2023 UNDER This is the sixteenth installment of the Flask Mega-Tutorial series, in which I'm going to add a full-text search capability to Microblog. Continue reading this post... No comments yet THE FLASK MEGA-TUTORIAL, PART XV: A BETTER APPLICATION STRUCTURE POSTED BY ON DECEMBER 3, 2023 UNDER This is the fifteenth installment of the Flask Mega-Tutorial series, in which I'm going to restructure the application using a style that is appropriate for larger applications. Continue reading this post... 2 comments * « Newer Posts * Older Posts » About Miguel Welcome to my blog! I'm a software engineer and technical writer, currently living in Drogheda, Ireland. You can also find me on Twitter, Mastodon, Github, LinkedIn, YouTube, Facebook and Patreon. Thank you for visiting! Categories 1 7 10 1 5 10 22 5 6 126 1 1 1 8 34 8 2 5 1 3 7 2 184 1 167 7 1 8 18 6 12 22 3 1 © 2012-2023 by Miguel Grinberg. All rights reserved. Questions?