Ready to Start Learning?

Sign in to check if you already have access, or get started with a purchase or membership.

Course Platform

Learn to Build a Course Platform with Django, Cloudinary, HTMX, Tailwind, and more.

Learn how to build a Course Platform from scratch using Python, Django, TailwindCSS, HTMX, and Cloudinary.
Topics include:
  • Use Python 3.12 and Django 5
  • Learn image upload basics with Django (plus the challenges with hosting images)
  • Integrate Cloudinary Image & Hosting
  • Optimize images sizes with a simple argument with thumbnails and large format
  • Build an Email-first opt-in workflow
  • Automatically resize videos to fit playback
  • Custom email verification process from scratch
  • Integrate TailwindCSS with django-tailwind
  • Use HTMX to render and handle Forms
  • Send Emails from Django with Gmail
  • Customize the Django Admin to fully manage and view videos and courses
  • Implement custom helper functions that can be re-used across Python projects
  • Stylize the frontend using Flowbite
  • Use the CloudinaryField on Django models to automatically handle images and videos
  • and much more

References

Course Platform

Lifetime access to this course

or get access to 500+ courses with a membership

Lessons

1

Welcome

0:50

2

Demo

5:46

3

Python Virtual Environment

3:44

4

Create the Django Project

5:27

5

Roadmap for this Course

5:10

6

Baseline Django Course Model

13:25

7

Django ImageField and Pillow

2:48

8

Syncing Code with Migrations

10:41

9

Django Admin to Manage Course Model

4:27

10

Handling Image Uploads in Development

8:39

11

How Django Manages Image Uploads

4:49

12

Configure Cloudinary for Django

7:44

13

Using the CloudinaryField for Django Image Hosting

3:32

14

Customize the Django Admin to Render HTML Images

5:32

15

On Demand Image Adjustments with Cloudinary Images

4:30

16

Model Methods for Image Sizes

5:48

17

Understanding Foreign Keys with the Lesson Model

8:59

18

Lesson Publish Status and Preview

2:43

19

Cloudinary Video + Thumbnail Fields for Lessons

3:22

20

Foreign Key Stacked Model Admin

1:55

21

Ordering with a Model Field

6:32

22

CloudinaryField Upload Options

9:10

23

Generate a Public ID Field

11:13

24

Reusable CloudinaryField Functions

11:00

25

Decoupling Cloudinary Helper Services from Models

13:41

26

Get Cloudinary Video Object Service

4:25

27

Signed Private Video URL in Admin

2:26

28

Embed Cloudinary Video with Pure HTML

5:07

29

Using Django Templates to Render Video

8:16

30

Using JavaScript for Video Embed Basics

7:00

31

Django & the Cloudinary Video Player

6:20

32

Override Django Admin Templates

8:00

33

Render Multiple Videos in One Page

5:07

34

View Logic and Database Lookup Services

8:47

35

URL View Routing for Database Lookups

10:13

36

Public ID As URL Path Lookups

5:19

37

Rendering Templates from Views

10:16

38

Render the Course List View

9:26

39

Course Detail View and Template Snippets

6:28

40

Lesson QuerySet for Different Status Values

10:15

41

Lesson Detail View

5:30

42

Render the Video Player for Users

8:25

43

Configure Django to Send Email with Gmail

8:22

44

Email Verification Models

6:11

45

Create the Email Model Form

4:09

46

Handing HTML Forms with Django

5:50

47

Rendering a Django Model Form

5:58

48

Email Validation & Verification Event

6:25

49

Email Verification Event Service

4:59

50

Send Email from Verification Event

8:33

51

Unique Verify Link with UUID

4:39

52

Verfiy Confirmation Token Service

11:39

53

Enrich the Session With Verified Email ID

6:28

54

Email Required on Lesson Detail View

6:57

55

Using HTMX To Dynamically Load Forms

8:34

56

HTMX with POST Data

6:30

57

Using HTMX to Handle Logout

5:00

58

But Why Tailwind with Django

4:14

59

Install Django Tailwind

14:42

60

Setup Flowbite with Django Tailwind

7:27

61

Login & Logout Views

5:09

62

Tailwind in the HTMX-Driven Login Form

5:01

63

Improved Course List View

5:55

64

List View wit Thumbnail Images

9:51

65

Video Frame as Lesson Thumbnail

2:24

66

Global CSS Spacing

2:35

67

Course Detail View

6:22

68

Improved Unlock Content Page

1:29

69

Improved Homepage

5:47

70

Thank you

0:42

71

Next up

0:34