Debugging Django

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

1 comments

Comments 1 - 1 of 1 previous next Post a comment

Post a comment
Embed Video
Edit your comment Cancel

29 Favorites & 1 Group

Debugging Django - Presentation Transcript

  1. Debugging Django Simon Willison DJUGL, 19th May 2008
  2. This talk is not about Test Driven Development http://www.flickr.com/photos/alikaragoz/209296304/
  3. This talk is about Bug Driven Development
  4. http://www.shipmentoffail.com/fails/2008/04/horse-vs-car-fail/
  5. Make the most of the error page Print statements and logging Using the debugger Catching errors in production Abusing the Test Client
  6. The Django error page It’s not just for errors! Trigger it explicitly with “assert False” Show a value with “assert False, variable”
  7. Logging to your console def index(req): print \"Hello there!\" [19/May/2008 18:14:39] \"GET /static/css/img/ djangosite80x15.gif HTTP/1.1\" 304 0 [19/May/2008 18:14:39] \"GET /static/css/img/purple- gradient.png HTTP/1.1\" 304 0 Hello there! [19/May/2008 18:14:47] \"GET / HTTP/1.1\" 200 12570
  8. Logging to your console # in settings.py import logging logging.basicConfig( level = logging.DEBUG, format = '%(asctime)s %(levelname)s %(message)s', ) # Anywhere else import logging logging.debug(\"A log message\")
  9. Logging to a file # in settings.py import logging logging.basicConfig( level = logging.DEBUG, format = '%(asctime)s %(levelname)s %(message)s', filename = '/tmp/dango.log', filemode = 'w' ) # Anywhere else import logging logging.debug(\"A log message\") $ tail -f /tmp/django.log
  10. Logging the calling context import logging, traceback, pprint def my_buggy_function(arg): context = pprint.pformat(traceback.extract_stack()) logging.debug(context)
  11. Using the debugger import pdb; pdb.set_trace() $ python -i ./manage.py ... ... >>> import pdb; pdb.pm()
  12. Errors in production Two misleadingly-named settings: # Receive 500 error e-mails if not DEBUG ADMINS = ( ('Simon Willison', 'simon@simonwillison.net'), ) # Receive 404 e-mails if SEND_BROKEN_LINK_EMAILS MANAGERS = ( ... ) IGNORABLE_404_ENDS = ('.php', '.cgi')
  13. Errors over XMPP
  14. db-error-log
  15. Custom error middleware class DBLogMiddleware(object): def process_exception(self, request, exception): server_name = socket.gethostname() tb_text = traceback.format_exc() class_name = exception.__class__.__name__ ... # in settings.py MIDDLEWARE_CLASSES = ( ..., 'djangodblog.DBLogMiddleware', )
  16. More useful middleware ProfilerMiddleware See profiler output with url?prof DebugFooter SQL and templates logged in footer
  17. Abusing the test client from django.test.utils import setup_test_environment setup_test_environment() from django.test.client import Client c = Client() r = c.get('/2008/speaking/') print r r.template r.context
  18. Test Driven Development www.djangoproject.com/documentation/testing/ www.slideshare.net/simon/advanced-django/

+ simonsimon, 2 years ago

custom

10395 views, 29 favs, 5 embeds more stats

Full write-up here: http://simonwillison.net/2008/M more

More Info

© All Rights Reserved

Go to text version
  • Total Views 10395
    • 10381 on SlideShare
    • 14 from embeds
  • Comments 1
  • Favorites 29
  • Downloads 246
Most viewed embeds
  • 9 views on http://www.nitinh.com
  • 2 views on http://static.slideshare.net
  • 1 views on http://surf.googlemashups.com
  • 1 views on http://127.0.0.1:8000
  • 1 views on http://feeds2.feedburner.com

more

All embeds
  • 9 views on http://www.nitinh.com
  • 2 views on http://static.slideshare.net
  • 1 views on http://surf.googlemashups.com
  • 1 views on http://127.0.0.1:8000
  • 1 views on http://feeds2.feedburner.com

less

Flagged as inappropriate Flag as inappropriate
Flag as innappropriate

Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

Cancel

Categories

Groups / Events