Slide 1

Slide 1 text

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'), ]

Slide 16

Slide 16 text

Blog - Template # post_detail.html {% extends 'base.html' %} {% block content %}

{{ post.title }}

{{ post.author }}

{{ post.body }}

Slide 17

Slide 17 text

Reason #5 Multiple Ways to Do the Same Thing

Slide 18

Slide 18 text

Example 1 - Templates App-level └── blog_project ├── posts ├── templates ├── pages ├── post_detail.html Project-level └── blog_project ├── posts ├── templates ├── post_detail.html

Slide 19

Slide 19 text

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