Django Girls tutorial: http://tutorial.djangogirls.org/en/
Official docs tutorial 1: https://docs.djangoproject.com/en/2.1/intro/tutorial01/
- Blah blah theory (~20m)
- Your own stuff (>1h)
- ...hack bornhack.dk
- ...or do your own thing
*) Remember: It's a crash course
**) You don't have to know everything about Django to use Django
Cool language | App ecosystem | Awesome | |
---|---|---|---|
Django | ✓ | ✓ | ✓ |
Rails | ✓ | ✓ | ✓ |
Flask | ✓ | ✓ | ✓ |
- Started at a US Newspaper (Lawrence Journal)
- Released in 2005
- 100+ releases, 65 CVE bulletins
- LTS release cycle introduced
- Important bullets:
- Rapid development
- Reusability and pluggability
- Don't Repeat Yourself (DRY)
- Convention over configuration (sane defaults)
- Batteries included (!=bloat)
...Django 2.0 drops Python 2!
Django scales.
Disqus, Instagram, Knight Foundation, MacArthur Foundation, Mozilla, National Geographic, Open Knowledge Foundation, Pinterest, Open Stack, The Washington Times, bornhack.dk
Djangocph, DjangoGirls, DjangoCon US, DjangoCon Europe... and (kind of) ReadTheDocs + Github
- Views
- URL dispatcher
- Models
- ORM
- Backends for everything*
- Templates
- Django template language
- Jinja2
- Forms
- Migrations
- Project
- Application aka. "app"
➜ django-admin startproject example_project
➜ cd example_project
➜ python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
August 30, 2016 - 12:19:05
Django version 1.10, using settings 'example_project.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
example_project/myapp/views.py
def my_view(request):
return HttpResponse("Hello world")
example_project/urls.py
urlpatterns = [
url(r'my-view', my_view),
]
class MyModel(models.Model):
field = models.IntegerField(default=42)
- ORM querysets
- Field types mapped to database
- Migrations
- Fat models, skinny views
def my_view(request):
template = "path/to/template.html"
context = Context({'object': 'value'})
return render_to_response(template, context)
project/myapp/templates/path/to/template.html
<html>
<body>
<p>Hello world</p>
<p>{{ object }}</p>
</body>
</html>
class MyForm(forms.Form):
field = forms.IntegerField()
def view(request):
if request.method == 'POST':
form = MyForm(request.POST)
if form.is_valid():
# do something
return HttpResponseRedirect("/url")
else:
form = MyForm()
context = Context({'form': form})
return render_to_response("page.html", context)
<html>
<body>
<form method="POST">
{{ csrf_token }}
{{ form }}
<button type="submit">Send it</button>
</form>
</body>
</html>
Data models change over time. Full stop.
Day 1:
class MyModel(models.Model):
my_field = models.IntegerField()
Day 2:
class MyModel(models.Model):
my_field = models.IntegerField()
another_field = models.CharField(max_length=123)
python manage.py makemigrations
python manage.py migrate
Everybody got Python?
Everybody got pip?
Okay let's go...
Try out the Django shell
python manage.py shell
- Hack bornhack.dk
- Do your own project
We encourage everyone to fork the site on Github and make PRs.