8 Reasons Why
Learning Django is Hard
William Vincent
Django Boston (January 2019)
https://wsvincent.com
Slide 2
Slide 2 text
No content
Slide 3
Slide 3 text
wsvincent.com
Slide 4
Slide 4 text
Reason #1
Web Development is Hard
Slide 5
Slide 5 text
No content
Slide 6
Slide 6 text
Reason #2
Local Dev Setup
Slide 7
Slide 7 text
Pipenv/Venv/Virtualenv
Slide 8
Slide 8 text
Reason #3
Lack of Educational Resources
Slide 9
Slide 9 text
Tutorials
● DjangoGirls - blog with FBVs
● Django for Beginners - 3 apps with CBVs
● Mozilla - lending library app
● SimpleIsBetterThanComplex - beginner’s guide 7-part series
● RealPython - growing list of tutorials, some out-of-date
● Official Polls tutorial - for intermediate web developers
Slide 10
Slide 10 text
No content
Slide 11
Slide 11 text
awesome-django
Slide 12
Slide 12 text
Reason #4
Models, Views, URLs, Templates
Slide 13
Slide 13 text
Blog - Models
# models.py
class Post(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(
'auth.User',
on_delete=models.CASCADE,
)
body = models.TextField()
Slide 14
Slide 14 text
Blog - Views
# views.py
from django.views.generic import DetailView
from .models import Post
class BlogDetailView(DetailView):
model = Post
template_name = 'post_detail.html'
Slide 15
Slide 15 text
Blog - URLs
# urls.py
from django.urls import path
from .views import BlogDetailView
urlpatterns = [
path('post//', BlogDetailView.as_view(),
name='post_detail'),
]
Example 2 - Settings files
● Two Scoops advocated using local, dev, and production settings.py files
● Environment variables the more modern approach but not well documented
yet.
● Most beginners are super confused by this!
Slide 20
Slide 20 text
Example 3 - About Page 3 ways
# views.py
from django.shortcuts import render
def about_page_view(request):
return render(request, 'about.html')
Slide 21
Slide 21 text
Example 3 - About Page 3 ways
# views.py
from django.views.generic import TemplateView
class AboutPageView(TemplateView):
template_name = 'about.html'
Slide 22
Slide 22 text
Example 3 - About Page 3 ways
# urls.py
from django.views.generic import TemplateView
urlpatterns = [
path(‘about/', TemplateView.as_view(template_name=’about.html’), name='about'),
]
Slide 23
Slide 23 text
Reason #6
FBVs vs CBVs
Slide 24
Slide 24 text
Two Scoops of Django
Slide 25
Slide 25 text
FBVs > CBVs > GCBVs
Slide 26
Slide 26 text
Reason #7
User model
Slide 27
Slide 27 text
Reason #8
Deployment
Slide 28
Slide 28 text
Resources
Django Newsletter
wsvincent.com/newsletter
Slides
tinyurl.com/djangoboston-2019
Awesome-django
github.com/wsvincent/awesome-django
My Site
wsvincent.com