Hi! I’m Matt Layman.
I am a Senior Staff Software Engineer at Included Health.
I like to teach others about writing good software while streaming on YouTube and am committed to helping my local community grow its tech skills by volunteering as a meetup organizer for Python Frederick.
Want to learn Django from top to bottom?
Understand Django will walk you through the Django web framework. We start from the top at an exploration of the browser and the layers that make the internet work, then dig deep down through the framework to reveal how you can make web applications using Django.
By the time you finish reading this book, you'll have a much deeper knowledge of how web applications work and, specifically, how Python-based web applications are built.
You can read the book online for free, right now. Prefer your own copy? You can buy an e-book or physical book today.
Recent
All Articles
- Postgres to SQLite - Building SaaS #204
- Docker Go, JS, Static Files - Building SaaS #203
- Cloud Migration Beginning - Building SaaS #202
- Kamal On A Droplet - Building SaaS #201
- Kamal - Building SaaS #200
- No Frills, Just Go: Standard Library Only Web Apps
- Layman's Guide to Python Built-in Functions
- Golang Middleware and DBs - Building SaaS #199
- More Go Standard Library - Building SaaS #198
- PDF Text Extraction With Python
- Go Standard Library App - Building SaaS #197
- Go Standard Library App - Building SaaS #197.2
- Go Standard Library App - Building SaaS #197.3
- Go Standard Library App - Building SaaS #197.4
- An Opinionated Introduction to CI/CD
- Activation Email Job - Building SaaS #196
- Trial Banner Inclusion Tag - Building SaaS #195
- Password Resets and Signal Handling - Building SaaS #194
- Boosting AI with Python: Using Click, Jinja2, and GPT Libraries
- Polish, Debug Toolbar, Email Signals - Building SaaS with Python and Django #193
- About, FAQ, and Home Page - Building SaaS with Python and Django #192
- Export Journal Feature - Building SaaS with Python and Django #191
- Settings and Billing Portal - Building SaaS with Python and Django #190
- Importing Content - Building SaaS with Python and Django #189
- Why Django and why not Flask?
- Flash messages and content encodings - Building SaaS with Python and Django #188
- NATS: Connecting Apps Over a Network Easily
- Start Polishing - Building SaaS with Python and Django #187
- Post-launch Punchlist - Building SaaS with Python and Django #186
- Do It Live - Building SaaS with Python and Django #185
- Final Pre-live Features - Building SaaS with Python and Django #184
- Finish Stripe Integration - Building SaaS with Python and Django #183
- Algorithmic Art with Python
- Stripe Checkout - Building SaaS with Python and Django #182
- Payments Gateway - Building SaaS with Python and Django#181
- Design and Stripe - Building SaaS with Python and Django #180
- Fun With Scrapy Link Validation on CI
- Legal and Stripe - Building SaaS with Python and Django #179
- Python, Markdown, and Tailwind: Best Buds!
- Sign Up - Building SaaS with Python and Django #178
- Tailwind CSS on Python and Heroku - Building SaaS
- WhiteNoise For Static Files - Building SaaS
- Operations, WhiteNoise, and Tailwind - Building SaaS with Python and Django #177
- Saturday stream explorer
- Switch an Existing Python Project To Ruff
- Message Parsing and Ruff - Building SaaS with Python and Django #176
- Parse Inbound Email - Building SaaS with Python and Django #175
- Idempotent Jobs - Building SaaS with Python and Django #174
- Email Round Trip - Building SaaS with Python and Django #173
- Practical AI: HuggingFace Transformers and Diffusers for Beginners
- DNS Strikes Back - Building SaaS with Python and Django #172
- Deploy to Heroku - Building SaaS with Python and Django #171
- SendGrid Inbound - Building SaaS with Python and Django #170
- SendGrid Outbound - Building SaaS with Python and Django #169
- Deployment Checklist - Building SaaS with Python and Django #168
- Practical Business Jinja
- Launch Preparation - Building SaaS with Python and Django #167
- Sentry Setup - Building SaaS with Python and Django #166
- Email Templates - Building SaaS with Python and Django #165
- Announcing luatest: A Lua test runner inspired by pytest
- Accounts and Email - Building SaaS with Python and Django #164
- First Major Model - Building SaaS with Python and Django #163
- Python + Upsolver: Simplified Realtime Data Workflows
- Finish Signup and CI - Building SaaS with Python and Django #162
- New SaaS Signup - Building SaaS with Python and Django #161
- New SaaS From Scratch - Building SaaS with Python and Django #160
- Python Exercises and Behind the Scenes - Building SaaS with Python and Django #159
- Python Exercism Exercises / Template Updates - Building SaaS with Python and Django #158
- Web Dev Panel Discussion
- Ellen's Alien Game / Display Related / Neovim config - Building SaaS with Python and Django #157
- Locomotive Engineer / New Model Field - Building SaaS with Python and Django #156
- Locking Down Your Users' Secrets: Django Sessions 101
- Cater Waiter, Template Bugs, and Type Fixes - Building SaaS with Python and Django #155
- Sync or Async? Unpacking the Mysteries of Django Signals
- Time Travel with django-simple-history
- Learn Django or Ruby on Rails?
- Inventory Management / Custom 404 page / Go gqlgen - Building SaaS #154
- Backend Development 101 with Django REST Framework
- Neovim setup / Tisbury Treasure Hunt / django-stubs - Building SaaS #153
- Gimme a (Type) Hint in Python
- Colossal Coaster and Stripe CSP - Building SaaS with Python and Django #152
- Learn Python By Example - Ghost Gobble Arcade Game
- Blackjack and Bugs - Building SaaS with Python and Django #151
- Learn Python By Example - Currency Exchange
- Development Cached Templates - Building SaaS with Python and Django #150
- Exercism and PDF Page Numbering - Building SaaS with Python and Django #149
- How To Add Sentry - Building SaaS with Python and Django #148
- Cryptography in Python
- Heroku Stack Upgrade - Building SaaS with Python and Django #147
- Episode 17 - Accepting Files
- JavaScript FormData - Building SaaS with Python and Django #146
- Customer Features - Building SaaS with Python and Django #145
- Delete Task UX - Building SaaS with Python and Django #144
- flake8-bugbear - Building SaaS with Python and Django #143
- Finish Teacher Checklist - Building SaaS with Python and Django #142
- Teacher Checklist Editing - Building SaaS with Python and Django #141
- Distributed System IDs
- Brute Force Development
- Huge Software Systems
- Finding Your Audience for Technical Docs
- Authz dilemmas
- Announcing django-denied
- Extract a New Open Source Package - Building SaaS with Python and Django #140
- Teacher Checklist Model - Building SaaS with Python and Django #139
- Teacher Checklist Template - Building SaaS with Python and Django #138
- Refactoring and New Features - Building SaaS with Python and Django #137
- New App In Project - Building SaaS with Python and Django #136
- You Don't Need JavaScript
- Debugging Tips And Techniques
- Brew Install The World - Building SaaS with Python and Django #135
- User Requests - Building SaaS with Python and Django #134
- S3 FileField - Building SaaS with Python and Django #133
- Great Expectations Data Quality Testing
- PDF Courses Report - Building SaaS with Python and Django #132
- PDF Attendance Report - Building SaaS with Python and Django #131
- Lua Log #9: HTTP Parser
- PDF Progress Report - Building SaaS with Python and Django #130
- Lua Log #8: HTTP Parsing
- Security And Django
- Lua Log #7: Routing Requests
- PDF Debugging - Building SaaS with Python and Django #129
- Lua Log #6: LASGI - ASGI in Lua
- Form Features and CSS - Building SaaS with Python and Django #128
- Upgrade to Tailwind CSS v3 - Building SaaS with Python and Django #127
- Lua Log #5: Callbacks to Coroutines
- Episode 16 - Setting Your Sites
- Lua Log #4: Build a (Terrible) Package
- Admin Interface For PDFs - Building SaaS with Python and Django #126
- Lua Log #3: Logging Without Logging
- Ordering Existing Models - Building SaaS with Python and Django #125
- Lua Log #2: Yak Shaving the Ecosystem
- Zip Archive HTTP Response - Building SaaS with Python and Django #124
- Go Fast With Django
- Lua Log #1: Event Loop Adventures
- Most Abstract Function First Is Better
- PDF Bundle Report - Building SaaS with Python and Django #123
- Goals for 2022
- Customer UX Feature - Building SaaS with Python and Django #122
- Threat Modeling Jurassic Park with Python
- Customer Requests - Building SaaS with Python and Django #121
- Scheduling Bugs - Building SaaS with Python and Django #120
- Command Your App
- Working With django-htmx - Building SaaS with Python and Django #119
- Bulk Delete Template - Building SaaS with Python and Django #118
- Pandas for Data Analysis
- Bulk Delete Form - Building SaaS with Python and Django #117
- Bulk Delete View - Building SaaS with Python and Django #116
- Finish School Break Filtering - Building SaaS with Python and Django #115
- Student Filtering UI - Building SaaS with Python and Django #114
- User File Use
- Episode 15 - User Session Data
- School Break Filters - Building SaaS with Python and Django #113
- Team Topologies: a review
- Episode 14 - Going Live
- Making Sense Of Settings
- Episode 13 - Does My Site Work?
- Per-visitor Data With Sessions
- Deploy A Site Live
- Test Your Apps
- Episode 12 - Success With Static Files
- How To Use Htmx In Django
- Are Django and Flask Similar?
- Which Django Version Should I Use?
- Episode 11 - Here, There, Middleware
- Serving Static Files
- Middleware Do You Go?
- How To Set Up Tailwind CSS In Django On Heroku
- Episode 10 - User Auth
- Make A Hugo Static Blog Inside A Django App
- User Authentication
- Episode 9 - Application Examination
- Hijack To Help Customers
- Anatomy Of An Application
- From Concept To Live In Two Weeks With Django
- Episode 8 - Administering Your App
- Administer All The Things
- Episode 7 - Models and Managers and Querysets, Oh My!
- Django Testing Toolbox
- Episode 6 - Where Does the Data Go?
- Store Data With Models
- Episode 5 - How To Use Forms
- User Interaction With Forms
- Vim 101: Basics of the Vim Text Editor
- Episode 4 - Building User Interfaces
- Templates For User Interfaces
- Episode 3 - Views On Django
- Views On Views
- Django Riffs, a podcast for learning Django
- Episode 2 - Enter With URLs
- Episode 1 - Get To Know Django
- URLs Lead The Way
- Serverless Python And Why You Should Try It Out
- From Browser To Django
- A Failed SaaS Postmortem
- Python Tears Through Mass Spectrometry Data
- Godot You Want To Make A Videogame
- Publish to DEV automatically with GitHub Actions
- Python alternative to Docker
- Python Testing 201 with pytest
- Quick and dirty mock service with Starlette
- On Patreon
- Using Git and GitHub to safely store your code
- Supercharging Vim: Blazing fast search and global replace
- Strategy for developer weight loss
- Teaching a kid to code with Pygame Zero
- Completing Account Deactivation on Building SaaS with Python and Django
- Supercharging Vim: Navigate files instantly
- Python Testing 101 with pytest
- Ansible Cranked to 11
- Building SaaS in January
- The Sleepy Developer: How Sleep Affects Your Code
- Local web development vs Vagrant vs Docker: What’s right for you?
- Django Tutorial Adventure Part 2
- Deciphering Python: How to use Abstract Syntax Trees (AST) to understand code
- Building SaaS with Python on Twitch
- Build Native Mobile Apps with Python (BeeWare)
- Consistent Python code with Black
- A tale of two site generators
- New Job: Doctor on Demand
- Full Health Developer Launch
- RFNM - Request For New Maintainer
- Developer Health Survey
- Doing code review
- Data science in Python
- Supercharging Vim: Instant testing
- Supercharging Vim: Using plugins
- Scraping the web with Scrapy
- Web frameworks shootout
- A NES for Christmas
- Pipfile and pipenv
- HTTPS made simple with Netlify
- No nitpicking in code reviews
- Using Pipfile for fun and profit
- Feature flags and waffles
- Pythonic code: leveraging packages
- Aphantasia
- Pythonic code: using the standard library
- Pythonic code: built-in functions
- Pythonic code: the property decorator
- Pythonic code: the with statement
- Pythonic code: the list comprehension
- Semantic UI in Ember
- The Pragmatic Programmer revisited
- 12-factor Django apps
- Open Graph, X cards, and plugins... Oh My!
- Cure for Imposter Syndrome
- PostgreSQL text search in Django
- Rollbar monitoring of Celery in a Django app
- A currentUser service for Ember with JWT
- The necessity of software abstraction
- 2 Critical Python packaging tools
- Sideload JSON API resources in Django
- Monitor Ember app errors with Rollbar
- handroll, sitemaps, and robots.txt
- Using Segment with Ember.js
- Using Brunch for JavaScript work
- Reading through the Python standard library
- Ship your requirements.txt
- We're all ambidextrous
- dotfiles: Hone your software tools
- Highlighting new file formats with Pygments
- Extending handroll for fun
- Oh, my shell? Oh My Zsh
- Inject JavaScript with PhantomJS to inspect websites
- Connect Python objects to blinker signals
- Toying with Statsd and Graphite
- A complete guide to i18n in Python
- A "simple" D3.js area chart
- Laziness is motivating
- handroll 1.1 released
- handroll: a simple website generator
- tappity tap TAP tappy
- Advanced Rails
- Patterns of Enterprise Application Architecture
- Test your packaging
- MarkWiki 1.3 released
- Ruby on Rails Tutorial
- Dreaming in code
- MarkWiki 1.2 released... now actually somewhat useful
- Java: a bad choice for FOSS
- ØMQ: A dynamic book with surprises
- Office Zen
- When you're feeling all TAPped out
- A Layman's walk through Code
- Should you cp from copywriters?
- It's fun -> ok!
- New website and server
- Java, Eclipse, and Maven altogether
- Pretty Perl and maintainability
- JavaScript has “Good Parts”!? Yes, it does.
- Perl Testing: A Developer’s Notebook
- Into the rabbit hole
- Code cleanup with Pylint
- Test Driven Development woes
- print 'Hello World!'