This lists many, but not all the changes between TSD 1.11 and TSD 3.x.
- Grammar corrections
- Cleanup frontmatter
- Zappa now pointing at github.com/zappa/zappa
- Finally admit that the Django 3 story for Asynchronous views was still in its infancy.
- Recommend Strawberry as best-of-breed Python GraphQL libraries
- Mention https://github.com/mirumee/ariadne-codegen for client generation
- Give special thanks to Fábio C. Barrionuevo
- Add link to Laura Gelsomino's LinkedIn profile
- Grammar corrections
- All form classes have
fields
defined
- Added Next and Nuxt
- Linked to Django support for HTMX and Hotwire
- General cleanup
- Make Graphene a first class citizen
- Discuss Ariadne's shortcomings
- Updated signals to Django 3.2
- Added render.com and divio cloud
- Remove mention of Heroku
- Added ASGI
- Modernized WSGI section
- Removed django-background-tasks as it is now unmaintained
- Edit, cleanup, and unleash remaining content after subsection 1.3.5
- Updated CI to Django 3.2
- Changed our names to Daniel and Audrey Roy Greenfeld
- Grammar and spelling corrections
- Corrected broken links across the book
- Add Digital Ocean App Platform
- Be honest about Heroku so users see it with open eyes
- Brought chapter in
- Removed link to ancient blog post
- Added mention of
breakpoint()
- Added section on the official forums
- Added Libera Chat IRC
- Linkified a few items to make things easier on readers
- Converted all docs links to point to Django 3.2
- Changed
isort
tip box to a package tip
- Removed trygql.com
- Mention OTPs in 2FA
- Chapter has been revised and is available for readers!
- Added warning box about using f-strings with loggers
- Removed Python 2 mention
- Added aldjemy
- Added django-stronghold
- Added environment variable section with multiple packages
- Added Authorized Vendors and Distributors informations
- Various spelling and grammar corrections
- Removed last python 2.7-style usages of
super()
- Use
breakpoint()
instead of importing pdb
- Added Luke Plant's "Django Views the Right Way"
- Corrected wrong parent class
- Grammar fixes
- Add missing
ql
to ORM engine
- JSONField is now for all database types
- Removed GitHub's 404 page from the list of being self-contained HTML, CSS, and JS
- Fix code highlighting
- Fix borked link
- Added testdriven.io
- Moved first reference to indexes from chapter 6 to chapter 7
- The inevitable grammar corrections
- Added
.zshrc
for configuring environment variables
- Made use of
functools.wraps
consistent
- Mixins should not inherit from
object
, that is a holdover from Python 2.7
- Reviewed content in full and added to the book
- Add instruction for git tagging project releases
- Started on reviewing content
- All pages updated for Django 3.x and Python 3.8
This update adds 15 new pages to Two Scoops of Django, bringing us up to 461!
- Yet more grammar fixes
- Added quote by DHH about the state of JavaScript in 2020
- Removed mention of long deprecated
allow_tags
property descriptor - Add warning box to use
format_html
function for enhancing security
- Added multiple user models
- Demonstration of proxy models
- Out of "being updated mode"
- Reviewed all packages
- Added new packages
- Removal of deprecated packages
- Revised and legible bad code examples!
- More grammar fixes
- All use of
reverse()
function now include URL namespaces
- Change focus of
Use Explicit Relative Imports
toUnderstand Explicit Relative Imports
and removedImplicit Relative Imports
- Removed tipbox for
Using django-admin Instead of manage.py
. This advice has been removed from the Django docs
- Removed link to blog post that used to describe how to use
DateTimeField
with logical deletes
- Added references to OpenAPI and tools
- Mentioned using vanilla Django for creating APIs
- Converted package tip for django-tastypie and django-jsonview into a new section for DRF alternatives
- Added trailing 'r' on
rest_framework.permissions.IsAdminUser
- Changed section "Popular JavaScript Frameworks" to "Popular JavaScript Approaches"
- Added description list for serverside rendering of templates
- Included alpine.js and turbolinks
- Added section on JSON encoding for data rendered in the template but consumed by JavaScript
- Corrected typo so PHI is now the acronym for
Protected Health Information
- Added Bio for Haris Ibrahim
- Included forward by Will Vincent
- Began expanding the async views chapter
- Made pipenv active again now that they had a formal release
- Added first half of Appendix A: Chapters mentioned in this book
- Model mommy is now model bakery
- Table layout corrections in chapter 6
BooleanField(null=True)
recommended instead ofNullBooleanField
- Corrected return type for
check_sprinkles
function
- Link to sources on how to rate limit
- Removed material on coreapi because that project has been replaced by openapi
- Added myst for rendering markdown in Sphinx
- Mention that django-authtools doesn't yet work for Django 3
- Ponycheckup is no more. Many thanks to Sasha Romijn for providing such an invaluable
- Added PyCharm Django Security
- More grammar!
- Consistent case for
URLConfs
- Replaced "typing" with "type casting", the latter is more explicit
- Added link to Cookiecutter docs
- Took out the long removed
use_for_related_fields
attribute from manager code example
- Fix LaTeX escape failure
- Removed Pony Checkup
- Added Zappa as an option
- Took away statement that Elastic Beanstalk was on mod_wsgi and hence no channels
- Added MacOS to Azure Pipelines in feature table
- Updated IDE preferences
- General grammar and spelling improvements
- Updated Django version to 3.x
- Updated Python version to Python 3.8/3.9
- Removed Appendix giving advice on upgrading from Python 2 to 3
- Remove mention of Mercurial.
- Changed
README.rst
toREADME.md
OS X
is nowMac
- References to
django-admin.py
replace withdjango-admin
- Changed pypi.python.org to pypi.org
- Removed last vestige of
Twitter Bootstrap
in favor ofBootstrap
- Due to problems with a number of PDF renderers on the Mac URL escaping '#' incorrectly, URLs with '#" are forwarded through our
feld.to
link shortener. The reader sees the correct URL, but clicking links takes them through feld.to. - "Don't Do This!!" code examples have new style
- Use "README file" instead of README.md or README.rst
- Added footer to instruct users where to submit issues
- Added warnings at the front of chapters which won't be published
- LaTeX datestamping now automated. Why didn't we do this years ago?
- Added placeins LaTex package to the
requirements-latex.yml
file. - Updated the book build instructions.
- Added Sentry
- Remove Pinterest from company list
- Removed apocryphal statement by Leonardo Da Vinci
- Added quote from "Structure and Interpretation of Computer Programs"
- Removed duplicate URL
- Added black
- Added wemake-python-styleguide
- Added isort for ordering imports
- Change JS coding style standard URL to github.com/standard/standard
- Added mention of poetry, conda, and pipenv
- Git is now the only tool for version control
- Added Docker to summary
- Warn that pip doesn't necessarily come with Python installations on Linux distros
- Removed mention of
easy_install
- Use of
json.load
instead ofjson.loads
- Added "Don't Upload Environment Directories To Open Source" warning box
- Now calls runserver with the correct settings argument
- Removed wemake-python-styleguide as a recommendation for Django projects
- Removed extra
models.py
from app layout example - Added Tom Christie's article for refuting the service layer approach to organizing business logic
- Rewrote the enumeration types segment as Django now includes them as part of core
- Mention
BooleanField
has default ofblank=True
- Added Haki Benita's excellent article on bullet proofing Django models
null=True
forManyToManyField
is now recommended against as it raises a check warning- Custom default Model Managers are no longer forbidden, just an advanced technique to be wary of
- Removed mention of South as a competing migrations system
- Added links to more useful references, removed some outdated ones
- Switch from JWT library to dj-rest-auth for authentication
- Remove link to csrf docs
- Removed historical note from Django 1.5 era about not removing function-based views
- Now using
path()
url route declarations instead of the oldurl()
function
- Added type annotations to views
- Added type annotations to views
- Flavor model now uses enumeration choices
- Advice on Mixins inheritance clarified for Python 3
- Added Serafeim Papastefanos' excellent CBV post to the resources section
- Added links to more useful references, removed some outdated ones
- Added stub chapter
- Made Python code example more concise
- HTML/DTL examples now use 2-space examples
- Removed Python 2 era mention that
super()
accepts arguments
- Marked django-wysiwyg as deprecated
- Removed statement about maturity of Jinja2 in Django, it's mature now
- Switched to 2 character tabs
- Make more explicit that routers go into
urls.py
modules - Mention Randall Degges advice about Usage-Based Plans
- Mention DRF support for different versioning schemas and link to docs
- Fixed link to Classy DRF site
- New chapter!
- Changed the name from Consuming REST APIs to JavaScript and Django
- Restructured to be about JavaScript in the Django domain, with REST APIs being a topic
- Added Vanilla JS as progressive option
- Moved JQuery to legacy. While, JQuery isn't legacy yet it is on the way to become so
- Rewrote strengthening JavaScript skills
- Removed section on
CSRF_COOKIE_HTTPONLY
as it doesn't make Django any more secure, just satisfies some security auditors. - No longer recommend JWT as an authentication method
- No longer excuse turning off CSRF to support JWT
- Added https://daniel.feldroy.com/when-to-use-mongodb-with-django.html
- Made Kevin Systrom a co-founder of Instagram instead of CEO
- Removed
python_2_unicode_compatible
from the example model
- Switched from cookiecutter-pypackage to cookiecutter-pylibrary
- Switched from
.txt
and.rst
doc extensions to.md
- Removed link to Jeff Knupp's excellent article on open sourcing projects as it is unfortunately out of date
- For Twine, replaced "non-ssh" with "non-secure"
- Replaced django-johnnycache and django-cache-machine with django-cacheops
- Removed yslow
- Change link to Lanyrd search for conference talks to YouTube
- Removed link to David Cramer's now defunct blog
- Reference Andrew Brook's excellent book, The Temple of Django Database Performance
- Added
on_delete
argument to foreign key example
- Added methods for differint user types
- Added assertRaisesMessage
- Added assertInHTML
- Added assertURLEqual
- Removed the defunct requestb.in
- Added Postman
- Added interrogate
- Removed advising the global installation of Sphinx
- Switch to recommending Markdown over reStructuredText
- Provide reStructuredText as the older alternative
- Remove segment on converting reStructuredText to Markdown
- Added tipbox for other markdown doc site renderers
- Added interrogate
- Changed
ATOMIC_REQUESTS
toFalse
Many thanks to our incredibly diligent security reviewers!
- Fixed borked link to Security Failures Chapter
- Added warningbox that Let's Encrypt is the most secure option (in progress of being rewritten)
- Added warningbox that not having HTTPS/SSL is inexescusable in 2020
- CSP report submitting is optional per the spec
- Made call for SSL very strident
- Added cloudflare as a free option for SSL
- Mentioned big cloud providers for SSL options
- Remove Sasha Romijn's Pony Checkup. Wonderful tool and we thank her for all those years of supporting Django.
- ALLOWED_HOSTS and DEBUG=True now throws 400 errors
IceCreamPayment
model's UUID switched fromdb_index=True
tounique=True
- Discussion of
SECRET_KEY
now states what can actually occur - Added section on not storing unnecessary data which includes credit card, PII, and PHI data
- Added missing 'N' to the word 'ever'
- Added section on upgrading password hasher to Argon2
- Added section on using SRI when loading static assets from external CDNs
- Removed
django.utils.six
, we're in Python 3 land now!
- Removed mention of
mod_python
- Removed reference to very old versions of
mod_wsgi
(3.3 or less) - Removed
--no-site-packages
from virtualenv
- Removed Python version column from CI-as-a-Service table and replaced with ``operating systems''
- Added Circle CI, GitHub Actions, Azure Pipelines, and Drone
- Removed defunct django-gargoyle package and added django-flags as the plucky newcomer
- Separated Dependency Management out of Core into own category
- Added MkDocs
- Added markdown as option to Sphinx
- Fixed link to Channels
- Replace
string_concat
withformat_lazy
- Added Simple Better Than Complex, apologies to Vitor we didn't include it at launch
- Added classy Django forms
- Removed links to our own pages of additional resources
- Removed django-maintenaincemode as it hasn't been updated yet to Django 3
- Removed django-maintenancemode-2 as it could create a false sense of security. Per the security reviewer: "that's not a solution, because if your Django installation is compromised, attackers can turn the maintenance mode off again."
- Made SMTP as SSL mandatory
- ALLOWED_HOSTS and DEBUG=True now throws CommandError
- Removed "Channels Works Better With Python 3.6+". Django 3 makes Python 3.6 or higher mandatory
- Fix broken link to Channels' testing documentation