| 1 | Welcome to the course! | 03:27 |
| 2 | Curriculum overview | 02:05 |
| 3 | Introduction to this section | 01:02 |
| 4 | Variables in Python | 08:27 |
| 5 | String formatting in Python | 06:27 |
| 6 | Getting user input | 05:17 |
| 7 | Writing our first Python app | 03:20 |
| 8 | Lists, tuples and sets | 06:32 |
| 9 | Advanced set operations | 04:40 |
| 10 | Booleans in Python | 05:01 |
| 11 | If statements | 08:18 |
| 12 | The "in" keyword in Python | 02:03 |
| 13 | If statements with the "in" keyword | 08:19 |
| 14 | Loops in Python | 11:08 |
| 15 | List comprehensions in Python | 07:25 |
| 16 | Dictionaries | 08:32 |
| 17 | Destructuring variables | 08:29 |
| 18 | Functions in Python | 10:42 |
| 19 | Function arguments and parameters | 07:41 |
| 20 | Default parameter values | 03:55 |
| 21 | Functions returning values | 07:20 |
| 22 | Lambda functions in Python | 07:53 |
| 23 | Dictionary comprehensions | 04:02 |
| 24 | Unpacking arguments | 10:25 |
| 25 | Unpacking keyword arguments | 08:45 |
| 26 | Object-Oriented Programming in Python | 15:53 |
| 27 | Magic methods: __str__ and __repr__ | 06:26 |
| 28 | @classmethod and @staticmethod | 14:04 |
| 29 | Class inheritance | 08:33 |
| 30 | Class composition | 06:09 |
| 31 | Type hinting in Python 3.5+ | 05:09 |
| 32 | Imports in Python | 09:34 |
| 33 | Relative imports in Python | 08:54 |
| 34 | Errors in Python | 12:48 |
| 35 | Custom error classes | 05:05 |
| 36 | First-class functions | 07:53 |
| 37 | Simple decorators in Python | 07:13 |
| 38 | The 'at' syntax for decorators | 03:34 |
| 39 | Decorating functions with parameters | 02:25 |
| 40 | Decorators with parameters | 04:51 |
| 41 | Mutability in Python | 06:04 |
| 42 | Mutable default parameters (and why they're a bad idea) | 04:28 |
| 43 | How do websites and the internet work? | 04:51 |
| 44 | Front end vs. Back end development | 02:16 |
| 45 | Key web technologies: HTML, CSS, and JavaScript | 02:59 |
| 46 | The Browser Inspector: using the developer tools | 06:27 |
| 47 | Elements: the basic components of HTML | 03:08 |
| 48 | A full example: HTML and CSS | 10:53 |
| 49 | Some of the most common HTML elements | 05:20 |
| 50 | What are HTML content categories? | 05:29 |
| 51 | Nesting elements in HTML | 05:50 |
| 52 | Starting our first HTML project | 03:57 |
| 53 | Which HTML elements can't be nested? | 02:14 |
| 54 | An overview of HTML container elements | 06:15 |
| 55 | A detailed look at HTML attributes | 06:09 |
| 56 | Adding images to our project | 04:47 |
| 57 | What is semantic HTML? | 05:40 |
| 58 | Document-level annotations in HTML | 05:51 |
| 59 | Completing our HTML project with document-level annotations | 03:06 |
| 60 | The best HTML resource: MDN | 02:05 |
| 61 | How to link a CSS file | 04:45 |
| 62 | Basic CSS selectors: targeting specific elements | 08:13 |
| 63 | How colours work: RGB, Hexadecimal, and HSL | 05:54 |
| 64 | Colours in CSS: text and background | 06:40 |
| 65 | Starting to write our project's CSS file | 06:13 |
| 66 | Inheritance in CSS | 05:44 |
| 67 | What properties can't be inherited? | 06:40 |
| 68 | The CSS Box Model | 05:27 |
| 69 | Overview of CSS units | 03:46 |
| 70 | Working with spacing in our project | 04:55 |
| 71 | Descendent selectors in CSS | 07:11 |
| 72 | What is specificity in CSS? | 07:37 |
| 73 | BEM: a simpler approach to CSS targeting | 14:43 |
| 74 | Overview of this section's project | 03:30 |
| 75 | From our YouTube channel: How to start a new software project | 11:56 |
| 76 | Step 1: becoming a user | 05:51 |
| 77 | Step 2: populating the backlog | 05:56 |
| 78 | Step 3: wireframing or rough design | 02:07 |
| 79 | Step 4: pixel perfect design | 18:00 |
| 80 | Step 5: creating the page structure | 05:03 |
| 81 | Step 6: coding the page structure with HTML | 04:44 |
| 82 | What are SVGs? | 03:01 |
| 83 | How to include images in our HTML site | 03:07 |
| 84 | Finishing the header and navigation | 03:42 |
| 85 | HTML forms: sending data | 05:41 |
| 86 | HTML forms: working with textareas | 03:12 |
| 87 | Creating the footer with multiple columns | 03:34 |
| 88 | How to style the header and menu bar | 10:54 |
| 89 | Setting the font family in our project | 00:40 |
| 90 | How to style HTML forms and inputs | 07:55 |
| 91 | How to style the micro blog entries | 03:33 |
| 92 | How to style the page footer | 06:38 |
| 93 | "Hello, world" with Flask | 08:01 |
| 94 | Using render_template to send longer HTML strings | 04:36 |
| 95 | What is Jinja2? | 05:37 |
| 96 | Jinja2 Expressions | 08:21 |
| 97 | Working with data structures in Jinja2 | 06:38 |
| 98 | Conditional statements in Jinja2 | 05:24 |
| 99 | Using loops in Jinja2 | 06:09 |
| 100 | Setting up our Microblog project with Flask | 06:41 |
| 101 | Receiving form data using Flask | 06:27 |
| 102 | Displaying past entries in the Microblog project | 04:36 |
| 103 | Formatting dates correctly in our entries | 03:08 |
| 104 | Introduction to MongoDB | 06:49 |
| 105 | Accessing MongoDB with Compass and Atlas | 09:14 |
| 106 | Storing Microblog entries in MongoDB | 06:35 |
| 107 | Retrieving the Microblog entries from MongoDB | 03:08 |
| 108 | How to use Flask's app factory pattern | 02:49 |
| 109 | What is the requirements.txt file? | 03:52 |
| 110 | What is Heroku? | 09:56 |
| 111 | The end result of this section: a fully deployed app | 01:27 |
| 112 | Getting our app ready for Heroku | 04:59 |
| 113 | Deploying our app to Heroku | 09:37 |
| 114 | Hiding the MongoDB connection details from our code | 09:37 |
| 115 | Defining Jinja variables using the 'set' keyword | 04:13 |
| 116 | Jinja filters to call inline functions using the pipe operator | 02:53 |
| 117 | Jinja macros to improve reusability and remove duplication | 07:32 |
| 118 | Jinja inheritance using 'extends' and 'block' | 07:05 |
| 119 | How to use CSS style tags with inheritance | 05:49 |
| 120 | Handling CSS in larger apps with inheritance | 05:26 |
| 121 | Jinja tests using the 'is' keyword | 06:45 |
| 122 | The Jinja Environment and Rendering Context | 05:52 |
| 123 | Routing with Jinja using url_for in your templates | 07:40 |
| 124 | Habit tracker project overview | 01:53 |
| 125 | Displaying and saving habits | 14:00 |
| 126 | Styling the habit tracker | 11:24 |
| 127 | Adding date navigation | 14:05 |
| 128 | Styling the date navigation | 07:20 |
| 129 | Completing habits | 15:30 |
| 130 | Adding Flask blueprints | 07:25 |
| 131 | Using MongoDB in the habit tracker | 16:19 |
| 132 | Deploying our app to Heroku | 08:07 |
| 133 | Jinja Includes with the include keyword | 13:37 |
| 134 | Whitespace control in Jinja | 04:30 |
| 135 | Jinja escaping and unescaping | 03:00 |
| 136 | The call block for Jinja macros | 05:16 |
| 137 | Portfolio Project Overview | 02:00 |
| 138 | Making our Flask app for this project | 05:14 |
| 139 | The base template and nav bar | 08:01 |
| 140 | Adding an about page to our Flask app | 03:17 |
| 141 | Adding a contact page to our Flask app | 07:19 |
| 142 | Introduction to CSS Grid | 12:44 |
| 143 | Media queries with CSS for responsive development | 04:34 |
| 144 | Displaying projects in the homepage using CSS Grid | 22:10 |
| 145 | Creating the individual project pages | 19:39 |
| 146 | Error handling with Flask using app.errorhandler | 04:14 |
| 147 | What are cookies? What are sessions? | 08:39 |
| 148 | Registering users in your Flask apps | 11:28 |
| 149 | Logging users in with Flask | 07:42 |
| 150 | Password hashing (or encryption) with passlib | 09:18 |
| 151 | Creating a 'login required' decorator | 07:05 |
| 152 | Project overview and CSS variables | 15:18 |
| 153 | Adding a nav bar | 15:22 |
| 154 | Adding a footer | 01:05 |
| 155 | Putting the page layout together | 02:57 |
| 156 | How to toggle dark mode in a Flask app | 09:54 |
| 157 | Create a form with WTForms | 07:04 |
| 158 | Render a WTForm in our template | 18:29 |
| 159 | Receive and validate data using WTForms | 14:00 |
| 160 | Displaying a table of all movies | 11:17 |
| 161 | Creating the movie details page | 10:07 |
| 162 | Setting movie ratings | 12:34 |
| 163 | Set the last watched date | 03:23 |
| 164 | Create a custom WTForm Widget | 07:05 |
| 165 | Editing movies and pre-populating a form | 07:24 |
| 166 | Add user signups to a Flask app | 09:47 |
| 167 | Add user logins to a Flask app | 09:43 |
| 168 | Personalize pages based on the logged in user | 08:12 |
| 169 | Add user logouts to a Flask app | 02:24 |
| 170 | Deploy our Flask app to Heroku | 08:54 |
| 171 | Concurrency in Heroku with gunicorn | 05:31 |