Mais conteúdo relacionado Semelhante a Debugging Django (20) Mais de Simon Willison (20) Debugging Django2. This talk is not about
Test Driven
Development
http://www.flickr.com/photos/alikaragoz/209296304/ 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” 8. Logging to your console
def index(req):
print quot;Hello there!quot;
[19/May/2008 18:14:39] quot;GET /static/css/img/
djangosite80x15.gif HTTP/1.1quot; 304 0
[19/May/2008 18:14:39] quot;GET /static/css/img/purple-
gradient.png HTTP/1.1quot; 304 0
Hello there!
[19/May/2008 18:14:47] quot;GET / HTTP/1.1quot; 200 12570 9. 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(quot;A log messagequot;) 10. 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(quot;A log messagequot;)
$ tail -f /tmp/django.log 11. Logging the calling context
import logging, traceback, pprint
def my_buggy_function(arg):
context = pprint.pformat(traceback.extract_stack())
logging.debug(context) 13. 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') 16. 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',
) 17. More useful middleware
ProfilerMiddleware
See profiler output with url?prof
DebugFooter
SQL and templates logged in footer 18. 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