Documente Academic
Documente Profesional
Documente Cultură
with Django
Jeremy Johnson
Contents
Preface
Thank you . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Course Repository . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
Errata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
2 Introduction
12
12
14
15
16
17
3 Software Craftsmanship
20
26
40
Testing Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
Testing Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
Testing Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
60
61
63
64
74
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
82
Git Branching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
Branching Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
84
94
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
95
96
Django 1.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
96
The Upgrade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
97
DiscoverRunner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
101
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
119
125
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
7 Graceful Degradation and Database Transactions with Django 1.7
127
. . . . . . . . . . . . . . . . . . . . . . . .
2
137
139
141
SavePoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
147
152
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
154
Exercises. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
156
158
159
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
161
163
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
165
172
179
. . . . . . . . . . . . . . . . . . . . . .
197
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
10 Building the Members Page
204
Gravatar Support
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
226
. . . . . . . . . . . . . . . . . . . . . . . . . .
231
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Bonus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
12 Django Migrations
262
281
. . . . . . . . . . . . . . . . . . . . . . . . . . 288
4
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
14 Djangular: Integrating Django and Angular
306
341