Beginning Django Web Application Development and Deployment with Python — Covers 1.11 LTS, compatible with Python 2 and 3 — Daniel Rubio Beginning Django Web Application Development and Deployment with Python Daniel Rubio Beginning Django: Web Application Development and Deployment with Python Daniel Rubio F. Bahia, Ensenada, Baja California, Mexico ISBN-13 (pbk): 978-1-4842-2786-2 ISBN-13 (electronic): 978-1-4842-2787-9 https://doi.org/10.1007/978-1-4842-2787-9 Library of Congress Control Number: 2017958633 Copyright © 2017 by Daniel Rubio This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation, broadcasting, reproduction on microfilms or in any other physical way, and transmission or information storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now known or hereafter developed. Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark. The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to proprietary rights. While the advice and information in this book are believed to be true and accurate at the date of publication, neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or omissions that may be made. The publisher makes no warranty, express or implied, with respect to the material contained herein. Cover image by Freepik (www.freepik.com). Managing Director: Welmoed Spahr Editorial Director: Todd Green Acquisitions Editor: Steve Anglin Development Editor: Matthew Moodie Technical Reviewer: Tri Phan Coordinating Editor: Mark Powers Copy Editor: Karen Jameson Distributed to the book trade worldwide by Springer Science+Business Media New York, 233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail [email protected], or visit www.springeronline.com. Apress Media, LLC is a California LLC and the sole member (owner) is Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a Delaware corporation. For information on translations, please e-mail [email protected], or visit http://www.apress.com/ rights-permissions. Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales web page at http://www.apress.com/bulk-sales. Any source code or other supplementary material referenced by the author in this book is available to readers on GitHub via the book’s product page, located at www.apress.com/9781484227862. For more detailed information, please visit http://www.apress.com/source-code. Printed on acid-free paper To Valentina, Nancy and all my immediate family To my uncle Alfonso, whose Commodore 64 let me gain an affinity for technology Contents at a Glance About the Author ����������������������������������������������������������������������������������������������������xxi About the Technical Reviewer ������������������������������������������������������������������������������xxiii Acknowledgments �������������������������������������������������������������������������������������������������xxv Introduction ���������������������������������������������������������������������������������������������������������xxvii ■ Chapter 1: Introduction to the Django Framework ������������������������������������������������1 ■ Chapter 2: Django Urls and Views �����������������������������������������������������������������������31 ■ Chapter 3: Django Templates �������������������������������������������������������������������������������73 ■ Chapter 4: Jinja Templates in Django ����������������������������������������������������������������117 ■ Chapter 5: Django Application Management �����������������������������������������������������163 ■ Chapter 6: Django Forms �����������������������������������������������������������������������������������217 ■ Chapter 7: Django Models ���������������������������������������������������������������������������������275 ■ Chapter 8: Django Model Queries and Managers ����������������������������������������������341 ■ Chapter 9: Django Model Forms and Class Views ���������������������������������������������403 ■ Chapter 10: Django User Management ��������������������������������������������������������������441 ■ Chapter 11: Django admin Management �����������������������������������������������������������495 ■ Chapter 12: REST Services with Django ������������������������������������������������������������549 ■ Appendix A: Python Basics ��������������������������������������������������������������������������������567 Index ���������������������������������������������������������������������������������������������������������������������585 v Contents About the Author ����������������������������������������������������������������������������������������������������xxi About the Technical Reviewer ������������������������������������������������������������������������������xxiii Acknowledgments �������������������������������������������������������������������������������������������������xxv Introduction ���������������������������������������������������������������������������������������������������������xxvii ■ Chapter 1: Introduction to the Django Framework ������������������������������������������������1 Django Framework Design Principles ������������������������������������������������������������������������������2 Don’t Repeat Yourself (DRY) Principle �����������������������������������������������������������������������������������������������������2 Explicit Is Better Than Implicit ����������������������������������������������������������������������������������������������������������������4 Loosely Coupled Architecture �����������������������������������������������������������������������������������������������������������������5 Install Django �������������������������������������������������������������������������������������������������������������������5 Install Python (Prerequisite) ��������������������������������������������������������������������������������������������������������������������6 Update or Install pip Package Manager (Prerequisite) ���������������������������������������������������������������������������7 Install virtualenv (Optional Prerequisite) �������������������������������������������������������������������������������������������������8 Install Django ����������������������������������������������������������������������������������������������������������������������������������������11 Install Django from Git ��������������������������������������������������������������������������������������������������������������������������11 Start a Django Project ����������������������������������������������������������������������������������������������������13 Set Up a Database for a Django Project �������������������������������������������������������������������������15 Install Python Database Packages ��������������������������������������������������������������������������������������������������������18 Test Django Database Connection and Build Django Base Tables ��������������������������������������������������������18 Set Up Content: Understand Urls, Templates, and Apps �������������������������������������������������19 Create and Configure Django Urls ��������������������������������������������������������������������������������������������������������20 Create and Configure Django Templates ����������������������������������������������������������������������������������������������21 Create and Configure Django Apps �������������������������������������������������������������������������������������������������������22 vii ■ Contents Set Up the Django admin Site ����������������������������������������������������������������������������������������25 Configure and Install the Django admin site App ����������������������������������������������������������������������������������25 Configure and Install the Django admin site docs App �������������������������������������������������������������������������28 ■ Chapter 2: Django Urls and Views �����������������������������������������������������������������������31 Url Regular Expressions �������������������������������������������������������������������������������������������������31 Precedence Rule: Granular Urls First, Broad Urls Last ��������������������������������������������������������������������������31 Exact Url Patterns: Forgoing Broad Matching ���������������������������������������������������������������������������������������32 Common Url Patterns ���������������������������������������������������������������������������������������������������������������������������33 Url Parameters, Extra Options, and Query Strings ����������������������������������������������������������35 Url Consolidation and Modularization �����������������������������������������������������������������������������38 Url Naming and Namespaces �����������������������������������������������������������������������������������������40 View Method Requests ���������������������������������������������������������������������������������������������������47 View Method Responses ������������������������������������������������������������������������������������������������49 Response Options for HTTP Status and Content-Type Headers ������������������������������������������������������������50 Built-In Response Shortcuts and Templates for Common HTTP Status: 404 (Not Found), 500 (Internal Server Error), 400 (Bad Request), and 403 (Forbidden) ���������������������������������������������������51 Built-In Response Shortcuts for Inline and Streamed Content �������������������������������������������������������������55 View Method Middleware �����������������������������������������������������������������������������������������������57 Built-In Middleware Classes �����������������������������������������������������������������������������������������������������������������57 Middleware Structure and Execution Process ��������������������������������������������������������������������������������������60 Middleware Flash Messages in View Methods���������������������������������������������������������������64 Add Flash Messages �����������������������������������������������������������������������������������������������������������������������������65 Access Flash Messages������������������������������������������������������������������������������������������������������������������������67 Class-Based Views ���������������������������������������������������������������������������������������������������������68 Built-In Class-Based Views �������������������������������������������������������������������������������������������������������������������69 Class-Based View Structure and Execution ������������������������������������������������������������������������������������������69 viii ■ Contents ■ Chapter 3: Django Templates �������������������������������������������������������������������������������73 Django Template Syntax �������������������������������������������������������������������������������������������������73 Auto-Escaping: HTML and Erring on the Safe Side �������������������������������������������������������������������������������74 Django Template Configuration ��������������������������������������������������������������������������������������75 Template Search Paths �������������������������������������������������������������������������������������������������������������������������76 Invalid Template Variables ��������������������������������������������������������������������������������������������������������������������78 Debug Output ����������������������������������������������������������������������������������������������������������������������������������������80 Auto-Escape �����������������������������������������������������������������������������������������������������������������������������������������81 File charset �������������������������������������������������������������������������������������������������������������������������������������������82 Automatic Access to Custom Template tag/filter Modules �������������������������������������������������������������������83 Template Loaders ���������������������������������������������������������������������������������������������������������������������������������84 Create Reusable Templates ��������������������������������������������������������������������������������������������85 Built-In Context Processors ��������������������������������������������������������������������������������������������87 Django debug context processor (django�template�context_processors�debug) ����������������������������������88 Django request context processor (django�template�context_processors�request) �����������������������������88 Django auth context processor (django�contrib�auth�context_processors�auth) ����������������������������������88 Django messages context processor (django�contrib�messages�context_processors�messages) �������89 Other Built-In Django Context Processors: i18n, media, static, tz, and CSRF context Processors ��������89 Custom Context Processors �������������������������������������������������������������������������������������������90 Built-In Django Filters�����������������������������������������������������������������������������������������������������91 Dates ����������������������������������������������������������������������������������������������������������������������������������������������������91 Strings, Lists, and Numbers ������������������������������������������������������������������������������������������������������������������94 Numbers �����������������������������������������������������������������������������������������������������������������������������������������������95 Strings ��������������������������������������������������������������������������������������������������������������������������������������������������96 Lists and Dictionaries ���������������������������������������������������������������������������������������������������������������������������98 Spacing and Special Characters �����������������������������������������������������������������������������������������������������������99 Development and Testing �������������������������������������������������������������������������������������������������������������������100 Urls �����������������������������������������������������������������������������������������������������������������������������������������������������101 Built-In Django Tags �����������������������������������������������������������������������������������������������������101 Dates ��������������������������������������������������������������������������������������������������������������������������������������������������102 Forms �������������������������������������������������������������������������������������������������������������������������������������������������102 ix ■ Contents Comparison Operations ����������������������������������������������������������������������������������������������������������������������102 Loops ��������������������������������������������������������������������������������������������������������������������������������������������������104 Python and Filter Operations ��������������������������������������������������������������������������������������������������������������107 Spacing and Special Characters ���������������������������������������������������������������������������������������������������������108 Template Structures ���������������������������������������������������������������������������������������������������������������������������109 Development and Testing �������������������������������������������������������������������������������������������������������������������110 Urls �����������������������������������������������������������������������������������������������������������������������������������������������������110 Custom Filters ��������������������������������������������������������������������������������������������������������������110 Structure ���������������������������������������������������������������������������������������������������������������������������������������������110 Options: Naming, HTML, and What Comes In and Out ������������������������������������������������������������������������112 Installation and Access �����������������������������������������������������������������������������������������������������������������������114 ■ Chapter 4: Jinja Templates in Django ����������������������������������������������������������������117 Jinja Advantages and Disadvantages ���������������������������������������������������������������������������117 Transition to Jinja Templates from Django Templates ��������������������������������������������������118 What Works the Same Way in Jinja and Django Templates ����������������������������������������������������������������118 What Works Differently in Jinja Templates Compared to Django Templates���������������������������������������119 New Concepts and Features in Jinja Templates vs� Django Templates ����������������������������������������������121 Jinja Template Configuration in Django ������������������������������������������������������������������������123 Template Search Paths �����������������������������������������������������������������������������������������������������������������������123 Auto-Escaping Behavior ���������������������������������������������������������������������������������������������������������������������125 Auto-Reload Template Behavior and Caching �������������������������������������������������������������������������������������126 Invalid Template Variables ������������������������������������������������������������������������������������������������������������������127 Template Loaders �������������������������������������������������������������������������������������������������������������������������������128 Create Reusable Jinja Templates ���������������������������������������������������������������������������������128 Jinja Globals: Access Data on All Jinja Templates, Like Django Context Processors �������134 Jinja Built-In Statements/Tags and Functions (Like Django Template Tags) ����������������135 Comparison Operations ����������������������������������������������������������������������������������������������������������������������136 Loops ��������������������������������������������������������������������������������������������������������������������������������������������������137 x ■ Contents Python and Filter Operations ��������������������������������������������������������������������������������������������������������������141 Spacing and Special Characters ���������������������������������������������������������������������������������������������������������142 Template Structures ���������������������������������������������������������������������������������������������������������������������������145 Jinja Built-In Filters and Tests (Like Django Filters) �����������������������������������������������������146 Strings, Lists, Dictionaries, Numbers, and Objects �����������������������������������������������������������������������������147 Strings and Lists ���������������������������������������������������������������������������������������������������������������������������������148 Dictionaries and Objects ���������������������������������������������������������������������������������������������������������������������149 Strings ������������������������������������������������������������������������������������������������������������������������������������������������151 Numbers ���������������������������������������������������������������������������������������������������������������������������������������������152 Spacing and Special Characters ���������������������������������������������������������������������������������������������������������153 Development and Testing �������������������������������������������������������������������������������������������������������������������155 Urls �����������������������������������������������������������������������������������������������������������������������������������������������������155 Custom Filters and Tests in Jinja ����������������������������������������������������������������������������������156 Structure ���������������������������������������������������������������������������������������������������������������������������������������������156 Installation and Access �����������������������������������������������������������������������������������������������������������������������157 Jinja Extensions �����������������������������������������������������������������������������������������������������������158 Enable Jinja Extensions ����������������������������������������������������������������������������������������������������������������������159 Create Jinja Extensions ����������������������������������������������������������������������������������������������������������������������160 Jinja Policies ����������������������������������������������������������������������������������������������������������������161 ■ Chapter 5: Django Application Management �����������������������������������������������������163 Django settings�py for the Real World ��������������������������������������������������������������������������163 Switch DEBUG to False �����������������������������������������������������������������������������������������������������������������������163 Define ALLOWED_HOSTS ��������������������������������������������������������������������������������������������������������������������164 Be Careful with the SECRET_KEY Value ����������������������������������������������������������������������������������������������165 Define Administrators for ADMINS and MANAGERS ���������������������������������������������������������������������������165 Use Dynamic Absolute Paths ��������������������������������������������������������������������������������������������������������������166 Use Multiple Environments or Configuration Files for Django ������������������������������������������������������������168 Set Up Static Web Page Resources - Images, CSS, JavaScript ������������������������������������173 Set Up Static Resources in a Development Environment (DEBUG=False) ������������������������������������������173 Access Static Resources in Django Templates �����������������������������������������������������������������������������������176 xi