Autoplay
Autocomplete
Previous Lesson
Complete and Continue
The New and Improved Flask Mega-Tutorial
Ebook Downloads
The Flask Mega-Tutorial Ebook Downloads
Preface
Preface
Chapter 1: Hello, World!
Introduction (1:37)
Installing Python (3:12)
Installing Flask (4:52)
A "Hello, World" Flask Application (11:24)
Chapter 2: Templates
Introduction (1:59)
What Are Templates? (8:12)
Conditional Statements (1:39)
Loops (4:08)
Template Inheritance (3:37)
Chapter 3: Web Forms
Introduction (0:38)
Introduction to Flask-WTF (5:50)
User Login Form (4:10)
Form Templates (5:13)
Form Views (3:51)
Receiving Form Data (7:54)
Improving Field Validation (2:50)
Generating Links (2:07)
Chapter 4: Database
Introduction (0:15)
Databases in Flask (0:58)
Database Migrations (0:53)
Flask-SQLAlchemy Configuration (6:15)
Database Models (4:57)
Creating the Migration Repository (1:41)
The First Database Migration (2:10)
Database Upgrade and Downgrade Workflow (1:20)
Database Relationships (7:53)
Playing with the Database (7:43)
Shell Context (2:11)
Chapter 5: User Logins
Introduction (0:14)
Password Hashing (4:46)
Introduction to Flask-Login (1:15)
Preparing the User Model for Flask-Login (1:02)
User Loader Function (1:54)
Logging Users In (8:28)
Logging Users Out (2:43)
Requiring Users to Login (5:16)
Showing the Logged In User in Templates (1:22)
User Registration (12:51)
Chapter 6: Profile Page and Avatars
Introduction (0:16)
User Profile Page (6:13)
Avatars (8:03)
Using Jinja2 Sub-Templates (1:45)
More Interesting Profiles (2:57)
Recording The Last Visit Time For a User (2:54)
Profile Editor (9:11)
Chapter 7: Error Handling
Introduction (0:12)
Error Handling in Flask (2:49)
Debug Mode (3:05)
Custom Error Pages (6:59)
Sending Errors by Email (8:00)
Logging to a File (3:33)
Fixing the Duplicate Username Bug (3:18)
Chapter 8: Followers
Introduction (0:12)
Database Relationships Revisited (2:32)
Representing Followers (0:57)
Database Model Representation (6:24)
Adding and Removing "follows" (6:06)
Obtaining the Posts from Followed Users (5:16)
Combining Own and Followed Posts (1:37)
Unit Testing the User Model (4:16)
Integrating Followers with the Application (7:08)
Chapter 9: Pagination
Introduction (0:18)
Submission of Blog Posts (5:54)
Displaying Blog Posts (1:55)
Making It Easier to Find Users to Follow (5:31)
Pagination of Blog Posts (5:10)
Page Navigation (4:35)
Pagination in the User Profile Page (2:38)
Chapter 10: Email Support
Introduction (3:32)
Introduction to Flask-Mail (3:07)
Flask-Mail Usage (2:53)
A Simple Email Framework (1:09)
Requesting a Password Reset (2:13)
Password Reset Tokens (7:53)
Sending a Password Reset Email (3:18)
Resetting a User Password (4:56)
Asynchronous Emails (2:16)
Chapter 11: Facelift
Introduction (0:18)
CSS Frameworks (1:01)
Introducing Bootstrap (1:44)
Using Flask-Bootstrap (3:08)
Rendering Bootstrap Forms (1:13)
Rendering of Blog Posts (0:32)
Rendering Pagination Links (0:42)
Before and After (1:39)
Chapter 12: Dates and Times
Introduction (0:17)
Timezone Hell (2:15)
Timezone Conversions (1:59)
Introducing Moment.js and Flask-Moment (3:38)
Using Moment.js (3:39)
Chapter 13: I18n and L10n
Introduction (0:12)
Introduction to Flask-Babel (5:44)
Marking Texts to Translate in Python Source Code (3:39)
Marking Texts to Translate in Templates (2:18)
Extracting Text to Translate (3:00)
Generating a Language Catalog (5:24)
Updating the Translations (1:34)
Translating Dates and Times (2:32)
Command-Line Enhancements (3:25)
Chapter 14: Ajax
Introduction (0:26)
Server-side vs. Client-side (1:57)
Live Translation Workflow (2:10)
Language Identification (5:50)
Displaying a "Translate" Link (1:42)
Using a Third-Party Translation Service (10:17)
Ajax From The Server (2:39)
Ajax From The Client (11:20)
Chapter 15: A Better Application Structure
Introduction (0:23)
Current Limitations (1:29)
Blueprints (6:15)
The Application Factory Pattern (7:03)
Unit Testing Improvements (3:35)
Environment Variables (2:41)
Requirements File (1:47)
Chapter 16: Full-Text Search
Introduction (0:12)
Introduction to Full-Text Search Engines (1:38)
Installing Elasticsearch (2:22)
Elasticsearch Tutorial (6:50)
Elasticsearch Configuration (3:09)
A Full-Text Search Abstraction (9:31)
Integrating Searches with SQLAlchemy (7:53)
Search Form (7:01)
Search View Function (3:07)
Chapter 17: Deployment on Linux
Introduction (0:22)
Traditional Hosting (1:03)
Creating an Ubuntu Server (1:52)
Using a SSH Client (1:44)
Password-less Logins (6:07)
Securing Your Server (4:25)
Installing Base Dependencies (3:31)
Installing the Application (4:54)
Setting Up MySQL (2:48)
Setting Up Gunicorn and Supervisor (4:25)
Setting Up Nginx (7:19)
Deploying Application Updates (1:19)
Raspberry Pi Hosting (1:16)
Chapter 18: Deployment on Heroku
Introduction (0:12)
Hosting on Heroku (0:32)
Creating a Heroku Account (0:14)
Installing the Heroku CLI (1:37)
Setting Up Git (0:58)
Creating a Heroku Application (1:41)
The Ephemeral File System (1:11)
Working With a Heroku Postgres Database (1:12)
Logging to stdout (2:35)
Compiled Translations (0:44)
Elasticsearch Hosting (0:56)
Updates to Requirements (0:55)
The Procfile (2:26)
Deploying the Application (2:38)
Deploying Application Updates (0:25)
Chapter 19: Deployment on Docker Containers
Introduction (0:25)
Installing Docker (0:45)
Building a Container Image (9:24)
Starting a Container (4:47)
Using Third-Party "Containerized" Services (9:33)
The Docker Container Registry (2:38)
Deployment of Containerized Applications (0:49)
Chapter 20: Some JavaScript Magic
Introduction (0:25)
Server-side Support (2:16)
Introduction to the Bootstrap Popover Component (2:35)
Executing a Function on Page Load (2:00)
Finding DOM Elements with Selectors (1:51)
Popovers and the DOM (5:29)
Hover Events (3:48)
Ajax Requests (3:41)
Popover Creation and Destruction (3:04)
Chapter 21: User Notifications
Introduction (0:21)
Private Messages (9:22)
Static Message Notification Badge (0:46)
Dynamic Message Notification Badge (3:48)
Delivering Notifications to Clients (10:29)
Chapter 22: Background Jobs
Introduction (0:14)
Introduction to Task Queues (1:37)
Using RQ (8:19)
Database Representation of Tasks (3:05)
Integrating RQ with the Flask Application (4:02)
Sending Emails from the RQ Task (2:16)
Task Helpers (3:29)
Implementing the Export Task (5:26)
Export Functionality in the Application (2:30)
Progress Notifications (7:45)
Deployment Considerations (6:57)
Chapter 23: Application Programming Interfaces (APIs)
Introduction (0:23)
REST as a Foundation of API Design (4:34)
Implementing an API Blueprint (2:18)
Representing Users as JSON Objects (4:19)
Representing Collections of Users (3:58)
Error Handling (4:04)
User Resource Endpoints (10:58)
API Authentication (18:15)
API Friendly Error Messages (3:02)
Teach online with
Logging to stdout
Lesson content locked
If you're already enrolled,
you'll need to login
.
Enroll in Course to Unlock