* better password hashing (bcrypt, etc...)
* time zone support
* built in selenium testing support
* bulk insert Models
* prefetch_related() (efficiently join m2m)
* SELECT FOR UPDATE support
* easy signing of cookies
* better project templates (basic scaffolding)
There are lots more... big release. Thanks to the all folks behind it.
It's a great release, but bulk_insert is really really dangerous because it apparently doesn't call the save() method nor the pre_save or post_save signals.
I don't like this because a lot of us put validation logic in Model#save and use the signals to trigger the search indexer, and so forth. This behavior is definitely going to catch some people off guard and it's bound to lead to serious bugs.
I understand why they don't call Model#save for every object, but I think they should have introduced something like Model#validate which is called before every save (including the new bulk inserts) so you still get a place to put custom validation logic that you know will get called the moment something is placed in the database. So now inserts are faster but at the expense of correctness. I'm not convinced that's a good trade off.
Oh, and for some reason bulk updates are completely missing, even though it seems natural to add bulk_insert and bulk_update at the same time.
This is the correct behavior, really. Bulk insert is not for cases where you have complex per-record validation or processing logic that also needs to be run in the application layer. It's for "I have all this data ready to go, now just shove it in there as efficiently as possible". If you need to have validation and additional per-record processing, signals, etc., insert the objects through the ORM normally. Yes, it'll be slower, but that's the price you pay for doing per-record processing.
It's really very simple: you just create a directory of files and point startproject/startapp to that directory with the --template flag. Files are copied over into the new app/project, with some simple replacements for things like the project name.
For anybody interested in trying out the new templating system, this one has been active for a little while now and is based on the work of Mozilla and it has HTML5 boilterplate + Twitter bootstrap already, as well as Jinja2, Sphinx, Django-Admin-Panel, Markdown, Celery, South and some other niceties:
Django Book is ancient and obsolete as hell, but if you can fix most of the breakages, it is one of the best resources there are.
I don't agree that the documentation is great, but it is definitely good, although it is frustratingly lacking in some areas - although you won't run into that soon.
My suggestion is to try it in this order:
1. Django Book
2. Django Project Intro
3. Django by Example
The best tip to learning Django is to use #django on freenode. People there will not do your work for you, but interactive live help is simply the best there is, unless you know forums like Something Awful where you can write out long-form questions to people who'll respond in the same fashion.
EDIT: I seriously wouldn't bother with any of the Django (book) books out there.
Since Railscasts.com is now making money through subscriptions, I'm surprised nobody's made a Djangocasts.com. Back when I was only flirting with web frameworks, Railscasts' bite-sized videos were the easiest way to get a taste of Rails.
How's your Python? I hated Django when I was learning it and Python at the same time, but having abandoned Django (and sticking with plain old Python), when I revisited it a few years ago, things were dramatically easier.
In short, if your Python skills are passable, I'd say the docs at djangoproject.com are more than sufficient. If not, I'd guess you might have troubles.
Maybe previous experience is significant - I learned to program building websites (HTML -> early CMSes -> PHP), then did a computer science degree (mostly Java, though I did a bit of Ruby on Rails), then got a job in C++ (where I still work, 3 years later), which I'd been doing for a year or so by the time I picked up Django.
To be honest, I suspect my Python's not great - I probably ought to spend more time just writing Python - I'd hazard a guess that less than 20% of the time I spend building websites with Django is spent writing Python (most is probably spent fiddling around with HTML/JS). I can always get by - but every once in a while I learn something new that I wish I'd known about long before (I remember learning about list comprehensions at an intro to Python talk at Stack Overflow DevDays after I'd been using Python for about a year!).
The main problems I ran into when upgrading were with the new timezone support, but it was easy to just disable it (set `USE_TZ = False`) until I have a real need for the feature (and the time to fix the issues it causes for current code).
How's SQLAlchemy working with MongoDB? I, for one, am very happy to be able to use MongoDB as a Django backend. I believe this is largely due to the fact that Django has never directly assumed data models to be stored in a SQL database, but has defined its own object abstraction layer instead.