Upgrade to Pro — share decks privately, control downloads, hide ads and more …

What's New in Django 1.3

What's New in Django 1.3

A talk I gave at DJUGL in May of 2011

Andrew Godwin

May 25, 2011

More Decks by Andrew Godwin

Other Decks in Programming


  1. Django: A Very Brief History Initial release in 2005 1.0

    released in 2008 1.3 released March 2011
  2. 1.3 was the "bugfix release" The plan: No major features,

    quick release The result: 2 major features, 10 months
  3. 1.3 was the "bugfix release" The plan: No major features,

    quick release The result: 2 major features, 10 months We'll get the next one out quicker...
  4. Notable Changes CSRF on AJAX requests Less swearwords Translation/i18n improvements

    No more mod_python No more XMLField render() shortcut
  5. Class-Based Views Biggest change in 1.3 Not required for all

    new views Designed to simplify common patterns
  6. CBV: Before def object_detail( request, year, month, day, queryset, date_field,

    month_format='%b', day_format='%d', object_id=None, slug=None, slug_field='slug', template_name=None, template_name_field=None, template_loader=loader, extra_context=None, context_processors=None, template_object_name='object', mimetype=None, allow_future=False ):
  7. CBV: After class AccountDetail(DetailView): model = Account context_object_name = "account"

    slug_field = "snail" def get_context_data(self, **kwargs): context = super(AccountDetail, self)\ .get_context_data(**kwargs) context['books'] = Book.objects.all() return context
  8. CBV: Simple views too! class AccountDetail(TemplateView): template_name = "mytempl.html" def

    get_context_data(self, **kwargs): return { "books": Book.objects.all(), "is_evil": True, }
  9. Logging Now actually sensible, not just emails Uses standard Python

    logging library Configured using the LOGGING setting
  10. LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'handlers': { 'console':{

    'level': 'DEBUG', 'class': 'logging.StreamHandler', }, 'mail_admins': { 'level': 'ERROR', 'class': 'django.utils.log.AdminEmailHandler', } }, 'loggers': { 'django.request': { 'handlers': ['mail_admins'], 'level': 'ERROR', }, 'myproject.custom': { 'handlers': ['console', 'mail_admins'], 'level': 'INFO', } } }
  11. staticfiles Lets apps ship with their static files View to

    serve them in development ./manage.py collectstatic for production
  12. on_delete Deleting rows just got better! Cascade delete (as before)

    Set to NULL Raise ProtectedError Set to arbitary value
  13. TemplateResponse A HTTPResponse class you can change Template only run

    at end of middleware Change context, or even template
  14. TemplateResponse Example from django.template.response \ import TemplateResponse def blog_index(request): return

    TemplateResponse( request, 'entry_list.html', {'entries': Entry.objects.all()}, ) ... response.context_data['foo'] = 'bar'
  15. CSRF on AJAX requests CSRF is a hard, hard problem

    Flash plus 307 redirect = fail You'll have to start supplying CSRF tokens to your JavaScript
  16. No more mod_python It's dead, Jim. If you're still using

    it, move to mod_wsgi or gunicorn now, please.
  17. render() shortcut Like render_to_response, but : Less characters to type

    Uses RequestContext Handy for those not on CBV
  18. How do you upgrade? Should be mostly seamless. You'll get

    warnings for deprecated settings (e.g. DATABASE_NAME)
  19. What's going to be in 1.4? We're not quite sure

    yet. Possible: App refactor HTML5 doctype ORM changes
  20. Future features GSOC should give us: Template engine refactor New

    form rendering Schema alteration low-level API Composite fields