Building SaaS with Python and Django

On Wednesdays at 9pm Eastern Time, I develop a Software as a Service (SaaS) on Twitch.

My primary goal is to teach people about the Django web framework and Python.

Django is a big web framework so I share my experience from using the project for 6+ years.

This page contains show notes and links to each stream. Join me live if you’re interested!

  • #Python
  • #Django
  • #templates

Bread and Butter Django - Building SaaS #58

In this episode, I worked on a views and templates. There are a number of core pages that are required to flesh out the minimal interface for the app. We’re building them.

  • #Python
  • #Django
  • #pytest
  • #testing

Switch A Django Project To Use Pytest - Building SaaS #57

In this episode, I replaced the default Django test runner to use pytest. We walked through installation, configuration, how to change tests, and the benefits that come from using pytest.

  • #Python
  • #Django
  • #bugs

How To Fix A Bug - Building SaaS #56

In this episode, we picked an issue from GitHub and worked on it. I explained the flow of using test driven development to show how the bug existed in an automated test. We wrote the test, then fixed the code. After that, we did some test refactoring to clean things up.

  • #Python
  • #Django
  • #models

Remodeling Data Relationships - Building SaaS #55

In this episode, we’re remodeling! I changed the model relationship between GradeLevel and Course from a ForeignKey (1 to many) to a ManyToManyField. We talked through the change and started fixing all the tests that broke.

  • #Python
  • #Django
  • #user testing

User Testing Feedback - Building SaaS #54

In this episode, we worked on issues found from a round of user testing. I talked about how I did user testing with my customer, then started to tackle the usability issues that she identified.

  • #Python
  • #Django
  • #onboarding
  • #forms

More Onboarding Goodness - Building SaaS #53

In this episode, we continued with onboarding. I added unit tests for the new form and explained how foreign keys are wired through in CreateView. Then we marched on to the next template in the flow.

  • #Python
  • #Django
  • #onboarding
  • #forms

Consistent Onboarding - Building SaaS #52

In this episode, we glued together some of the onboarding steps. I added data validation so that future steps depend on data existing from previous steps. Then we added page messaging to direct users to a proper page.

  • #Python
  • #Django
  • #onboarding
  • #forms

Onboarding Forms - Building SaaS #51

In this episode, we added the first form to collect data in the onboarding flow. We used a CreateView and defined all the fields that are needed in the HTML form.

  • #Python
  • #Django
  • #onboarding
  • #CSS

Onboarding Continuity - Building SaaS #50

In this episode, we stepped from the welcome onboarding page to the first interactive page in the flow. I extracted the common banner for each of the templates and customized it for each of the steps in the process.

  • #Python
  • #Django
  • #onboarding
  • #CSS

Starting the Onboarding Flow - Building SaaS #49

In this episode, we worked on the progress element that will display in every step of the onboarding flow. I added some labels and styled the banner using Tailwind CSS. At the end of the stream, we boxed in the shape of the welcome page with some placeholder elements.

  • #Python
  • #Django
  • #onboarding

Onboarding - Building SaaS #48

In this episode, we did some design work to plan out the onboarding flow for new users. I spoke through my design process, outlined what a new user will need to do to succeed, wrote down the plan in GitHub issues, then started to implement that flow.

  • #Python
  • #Django
  • #CSS
  • #template

How To Style Sign Up - Building SaaS #47

In this episode, I added styling to the Sign Up page of the site. We chatted about CSS tools and frameworks, the benefit of feature flags to control what UI is displayed to users, and how to use Tailwind CSS to modify a design quickly.

  • #Python
  • #Django
  • #views

A Week At A Time - Building SaaS #46

In this episode, we worked on a weekly view for the Django app. We made navigation that would let users click from one week to the next, then fixed up the view to pull time from that particular week.

  • #Python
  • #Django
  • #templates

Templates and Logic - Building SaaS #45

In this episode, we added content to a template and talked about the N+1 query bug. I also worked tricky logic involving date handling.

  • #Python
  • #Django
  • #forms

Fast Forms With UpdateView - Building SaaS #44

In this episode, we worked on an edit view. We used Django’s generic UpdateView to aid the process and test drove the creation of the view to verify things every step of the way.

  • #Django
  • #Tailwind
  • #templates

Use Tailwind On A Template - Building SaaS #43

In this episode, we worked on the template styles of a tabular view. We also made some context data adjustments to include header rows and column highlighting.

  • #Django
  • #Tailwind
  • #templates

Add Styles To Templates - Building SaaS #42

In this episode, I added a CSS framework, Tailwind CSS. After working through some issues with the log out feature, we started to style the base template of the site.

  • #Django
  • #django-allauth
  • #users

User Accounts With django-allauth - Building SaaS #41

In this episode, we added django-allauth to create accounts that default to email instead of using usernames. We added the package, configured some templates, and created tests.