Learn Django 3 with four end-to-end web projects Key Features Learn Django 3 by building real-world web applications from scratch in Python, using coding best practices Integrate other technologies into your application with clear, step-by-step explanations and comprehensive example code Implement advanced functionalities like a full-text search engine, a user activity stream, or a recommendation engine Add real-time features with Django Channels and WebSockets Book Description If you want to learn the entire process of developing professional web applications with Python and Django, then this book is for you. In the process of building four professional Django projects, you will learn about Django 3 features, how to solve common web development problems, how to implement best practices, and how to successfully deploy your applications. In this book, you will build a blog application, a social image bookmarking website, an online shop, and an e-learning platform. Step-by-step guidance will teach you how to integrate popular technologies, enhance your applications with AJAX, create RESTful APIs, and set up a production environment for your Django projects. By the end of this book, you will have mastered Django 3 by building advanced web applications. What you will learn Build real-world web applications Learn Django essentials, including models, views, ORM, templates, URLs, forms, and authentication Implement advanced features such as custom model fields, custom template tags, cache, middleware, localization, and more Create complex functionalities, such as AJAX interactions, social authentication, a full-text search engine, a payment system, a CMS, a RESTful API, and more Integrate other technologies, including Redis, Celery, RabbitMQ, PostgreSQL, and Channels, into your projects Deploy Django projects in production using NGINX, uWSGI, and Daphne Who this book is for This book is intended for developers with Python knowledge who wish to learn Django in a pragmatic way. Perhaps you are completely new to Django, or you already know a little but you want to get the most out of it. This book will help you to master the most relevant areas of the framework by building practical projects from scratch. You need to have familiarity with programming concepts in order to read this book. Some previous knowledge of HTML and JavaScript is assumed.
Author(s): Antonio Melé
Edition: 3
Publisher: Packt Publishing Ltd
Year: 2020
Language: English
Pages: 568
Cover
Copyright
Packt Page
Contributors
Table of Contents
Preface
Chapter 1: Building a Blog Application
Installing Django
Creating an isolated Python environment
Installing Django with pip
Creating your first project
Running the development server
Project settings
Projects and applications
Creating an application
Designing the blog data schema
Activating the application
Creating and applying migrations
Creating an administration site for models
Creating a superuser
The Django administration site
Adding models to the administration site
Customizing the way that models are displayed
Working with QuerySets and managers
Creating objects
Updating objects
Retrieving objects
Using the filter() method
Using exclude()
Using order_by()
Deleting objects
When QuerySets are evaluated
Creating model managers
Building list and detail views
Creating list and detail views
Adding URL patterns for your views
Canonical URLs for models
Creating templates for your views
Adding pagination
Using class-based views
Summary
Chapter 2: Enhancing Your Blog with Advanced Features
Sharing posts by email
Creating forms with Django
Handling forms in views
Sending emails with Django
Rendering forms in templates
Creating a comment system
Building a model
Creating forms from models
Handling ModelForms in views
Adding comments to the post detail template
Adding the tagging functionality
Retrieving posts by similarity
Summary
Chapter 3: Extending Your Blog Application
Creating custom template tags and filters
Custom template tags
Custom template filters
Adding a sitemap to your site
Creating feeds for your blog posts
Adding full-text search to your blog
Installing PostgreSQL
Simple search lookups
Searching against multiple fields
Building a search view
Stemming and ranking results
Weighting queries
Searching with trigram similarity
Other full-text search engines
Summary
Chapter 4: Building a Social Website
Creating a social website project
Starting your social website project
Using the Django authentication framework
Creating a login view
Using Django authentication views
Login and logout views
Changing password views
Resetting password views
User registration and user profiles
User registration
Extending the user model
Using a custom user model
Using the messages framework
Building a custom authentication backend
Adding social authentication to your site
Running the development server through HTTPS
Authentication using Facebook
Authentication using Twitter
Authentication using Google
Summary
Chapter 5: Sharing Content on Your Website
Creating an image bookmarking website
Building the image model
Creating many-to-many relationships
Registering the image model in the administration site
Posting content from other websites
Cleaning form fields
Overriding the save() method of a ModelForm
Building a bookmarklet with jQuery
Creating a detail view for images
Creating image thumbnails using easy-thumbnails
Adding AJAX actions with jQuery
Loading jQuery
Cross-site request forgery in AJAX requests
Performing AJAX requests with jQuery
Creating custom decorators for your views
Adding AJAX pagination to your list views
Summary
Chapter 6: Tracking User Actions
Building a follow system
Creating many-to-many relationships with an intermediary model
Creating list and detail views for user profiles
Building an AJAX view to follow users
Building a generic activity stream application
Using the contenttypes framework
Adding generic relations to your models
Avoiding duplicate actions in the activity stream
Adding user actions to the activity stream
Displaying the activity stream
Optimizing QuerySets that involve related objects
Using select_related()
Using prefetch_related()
Creating templates for actions
Using signals for denormalizing counts
Working with signals
Application configuration classes
Using Redis for storing item views
Installing Redis
Using Redis with Python
Storing item views in Redis
Storing a ranking in Redis
Next steps with Redis
Summary
Chapter 7: Building an Online Shop
Creating an online shop project
Creating product catalog models
Registering catalog models on the administration site
Building catalog views
Creating catalog templates
Building a shopping cart
Using Django sessions
Session settings
Session expiration
Storing shopping carts in sessions
Creating shopping cart views
Adding items to the cart
Building a template to display the cart
Adding products to the cart
Updating product quantities in the cart
Creating a context processor for the current cart
Context processors
Setting the cart into the request context
Registering customer orders
Creating order models
Including order models in the administration site
Creating customer orders
Launching asynchronous tasks with Celery
Installing Celery
Installing RabbitMQ
Adding Celery to your project
Adding asynchronous tasks to your application
Monitoring Celery
Summary
Chapter 8: Managing Payments and Orders
Integrating a payment gateway
Creating a Braintree sandbox account
Installing the Braintree Python module
Integrating the payment gateway
Integrating Braintree using Hosted Fields
Testing payments
Going live
Exporting orders to CSV files
Adding custom actions to the administration site
Extending the administration site with custom views
Generating PDF invoices dynamically
Installing WeasyPrint
Creating a PDF template
Rendering PDF files
Sending PDF files by email
Summary
Chapter 9: Extending Your Shop
Creating a coupon system
Building the coupon model
Applying a coupon to the shopping cart
Applying coupons to orders
Adding internationalization and localization
Internationalization with Django
Internationalization and localization settings
Internationalization management commands
How to add translations to a Django project
How Django determines the current language
Preparing your project for internationalization
Translating Python code
Standard translations
Lazy translations
Translations including variables
Plural forms in translations
Translating your own code
Translating templates
The {% trans %} template tag
The {% blocktrans %} template tag
Translating the shop templates
Using the Rosetta translation interface
Fuzzy translations
URL patterns for internationalization
Adding a language prefix to URL patterns
Translating URL patterns
Allowing users to switch language
Translating models with django-parler
Installing django-parler
Translating model fields
Integrating translations into the administration site
Creating migrations for model translations
Adapting views for translations
Format localization
Using django-localflavor to validate form fields
Building a recommendation engine
Recommending products based on previous purchases
Summary
Chapter 10: Building an E-Learning Platform
Setting up the e-learning project
Building the course models
Registering the models in the administration site
Using fixtures to provide initial data for models
Creating models for diverse content
Using model inheritance
Abstract models
Multi-table model inheritance
Proxy models
Creating the content models
Creating custom model fields
Adding ordering to module and content objects
Creating a CMS
Adding an authentication system
Creating the authentication templates
Creating class-based views
Using mixins for class-based views
Working with groups and permissions
Restricting access to class-based views
Managing course modules and their contents
Using formsets for course modules
Adding content to course modules
Managing modules and their contents
Reordering modules and their contents
Using mixins from django-braces
Summary
Chapter 11: Rendering and Caching Content
Displaying courses
Adding student registration
Creating a student registration view
Enrolling on courses
Accessing the course contents
Rendering different types of content
Using the cache framework
Available cache backends
Installing Memcached
Cache settings
Adding Memcached to your project
Monitoring Memcached
Cache levels
Using the low-level cache API
Caching based on dynamic data
Caching template fragments
Caching views
Using the per-site cache
Summary
Chapter 12: Building an API
Building a RESTful API
Installing Django REST framework
Defining serializers
Understanding parsers and renderers
Building list and detail views
Creating nested serializers
Building custom API views
Handling authentication
Adding permissions to views
Creating viewsets and routers
Adding additional actions to viewsets
Creating custom permissions
Serializing course contents
Consuming the REST API
Summary
Chapter 13: Building a Chat Server
Creating a chat application
Implementing the chat room view
Deactivating the per-site cache
Real-time Django with Channels
Asynchronous applications using ASGI
The request/response cycle using Channels
Installing Channels
Writing a consumer
Routing
Implementing the WebSocket client
Enabling a channel layer
Channels and groups
Setting up a channel layer with Redis
Updating the consumer to broadcast messages
Adding context to the messages
Modifying the consumer to be fully asynchronous
Integrating the chat with existing views
Summary
Chapter 14: Going Live
Creating a production environment
Managing settings for multiple environments
Using PostgreSQL
Checking your project
Serving Django through WSGI
Installing uWSGI
Configuring uWSGI
Installing NGINX
The production environment
Configuring NGINX
Serving static and media assets
Securing connections with SSL/TLS
Creating an SSL/TLS certificate
Configuring NGINX to use SSL/TLS
Configuring your Django project for SSL/TLS
Redirecting HTTP traffic over to HTTPS
Using Daphne for Django Channels
Using secure connections for WebSockets
Including Daphne in the NGINX configuration
Creating a custom middleware
Creating a subdomain middleware
Serving multiple subdomains with NGINX
Implementing custom management commands
Summary
Other Books You May Enjoy
Index