Django
डिबगिंग
खोज…
टिप्पणियों
pdb
Pdb क्रमशः ग्लोबल्स globals()
या locals()
(Pdb) प्रॉम्प्ट में टाइप करके सभी मौजूदा वैरिएबल्स को ग्लोबल या लोकल स्कोप में प्रिंट कर सकता है।
पायथन डीबगर (पीडीबी) का उपयोग करना
अधिकांश बुनियादी Django डिबगिंग उपकरण pdb है , पायथन मानक पुस्तकालय का एक हिस्सा है।
Init view script
आइए एक साधारण views.py
की जाँच करें। स्क्रिप्ट:
from django.http import HttpResponse
def index(request):
foo = 1
bar = 0
bug = foo/bar
return HttpResponse("%d goes here." % bug)
सर्वर चलाने के लिए कंसोल कमांड:
python manage.py runserver
यह स्पष्ट है कि जब आप इंडेक्स पेज को लोड करने का प्रयास करते हैं, तो Django एक ZeroDivisionError
फेंक देगा, लेकिन अगर हम यह दिखावा करेंगे कि बग कोड में बहुत गहरा है, तो यह वास्तव में बुरा हो सकता है।
एक ब्रेकपॉइंट सेट करना
सौभाग्य से, हम उस बग का पता लगाने के लिए एक ब्रेकपॉइंट सेट कर सकते हैं:
from django.http import HttpResponse
# Pdb import
import pdb
def index(request):
foo = 1
bar = 0
# This is our new breakpoint
pdb.set_trace()
bug = foo/bar
return HttpResponse("%d goes here." % bug)
Pdb के साथ सर्वर चलाने के लिए कंसोल कमांड:
python -m pdb manage.py runserver
अब पेज लोड ब्रेकपॉइंट शेल में (Pdb) प्रॉम्प्ट को ट्रिगर करेगा, जो आपके ब्राउज़र को लंबित स्थिति में भी लटकाएगा।
पीडीबी शेल के साथ डिबगिंग
यह शेल के माध्यम से स्क्रिप्ट के साथ बातचीत करके उस दृश्य को डीबग करने का समय है:
> ../views.py(12)index()
-> bug = foo/bar
# input 'foo/bar' expression to see division results:
(Pdb) foo/bar
*** ZeroDivisionError: division by zero
# input variables names to check their values:
(Pdb) foo
1
(Pdb) bar
0
# 'bar' is a source of the problem, so if we set it's value > 0...
(Pdb) bar = 1
(Pdb) foo/bar
1.0
# exception gone, ask pdb to continue execution by typing 'c':
(Pdb) c
[03/Aug/2016 10:50:45] "GET / HTTP/1.1" 200 111
अंतिम पंक्ति में हम देखते हैं कि हमारे विचार ने एक OK
प्रतिक्रिया दी और इसे निष्पादित करना चाहिए।
पीडीबी लूप को रोकने के लिए, केवल शेल में इनपुट q
।
Django डीबग टूलबार का उपयोग करना
सबसे पहले, आपको django-debug-toolbar स्थापित करने की आवश्यकता है:
pip install django-debug-toolbar
settings.py :
इसके बाद, इसे इंस्टॉल किए गए ऐप्स को प्रोजेक्ट करने के लिए शामिल करें, लेकिन सावधान रहें - इस तरह के डेवलपमेंट-ओनली ऐप और मिडलवेयर के लिए डिबग टूलबार के रूप में एक अलग settings.py
फ़ाइल का उपयोग करना हमेशा एक अच्छा अभ्यास होता है:
# If environment is dev...
DEBUG = True
INSTALLED_APPS += [
'debug_toolbar',
]
MIDDLEWARE += ['debug_toolbar.middleware.DebugToolbarMiddleware']
डीबग टूलबार भी स्थिर फ़ाइलों पर निर्भर करता है, इसलिए उपयुक्त ऐप को भी शामिल किया जाना चाहिए:
INSTALLED_APPS = [
# ...
'django.contrib.staticfiles',
# ...
]
STATIC_URL = '/static/'
# If environment is dev...
DEBUG = True
INSTALLED_APPS += [
'debug_toolbar',
]
कुछ मामलों में, यह settings.py
में INTERNAL_IPS
सेट करने के लिए भी आवश्यक है:
INTERNAL_IPS = ('127.0.0.1', )
urls.py :
urls.py
, जैसा कि आधिकारिक प्रलेखन बताता है, अगले स्निपेट को डीबग टूलबार रूटिंग को सक्षम करना चाहिए:
if settings.DEBUG and 'debug_toolbar' in settings.INSTALLED_APPS:
import debug_toolbar
urlpatterns += [
url(r'^__debug__/', include(debug_toolbar.urls)),
]
स्थापना के बाद टूलबार के स्टेटिक को इकट्ठा करें:
python manage.py collectstatic
यही है, डिबग टूलबार आपको प्रोजेक्ट के पृष्ठों पर दिखाई देगा, निष्पादन समय, एसक्यूएल, स्टैटिक फाइलें, सिग्नल आदि के बारे में विभिन्न उपयोगी जानकारी प्रदान करता है।
HTML:
इसके अलावा, django-debug-toolbar
को ठीक से रेंडर करने के लिए सामग्री-प्रकार के text/html
, <html>
और <body>
टैग की आवश्यकता होती है।
यदि आप सुनिश्चित करते हैं कि आपने सब कुछ ठीक से कॉन्फ़िगर किया है, लेकिन डिबग टूलबार अभी भी प्रदान नहीं किया गया है: इसका पता लगाने के लिए इस "परमाणु" समाधान का उपयोग करें ।
"मुखर झूठ" का उपयोग करना
विकास करते समय, निम्नलिखित कोड को अपने कोड में सम्मिलित करें:
assert False, value
जब इस लाइन को निष्पादित किया जाता है, तो एक त्रुटि संदेश के रूप में दिए गए मूल्य के साथ एक AssertionError
को बढ़ाने के लिए django का कारण होगा।
यदि यह किसी दृश्य में, या किसी दृश्य से बुलाए गए कोड में होता है, और DEBUG=True
सेट हो जाता है, तो ब्राउज़र में बहुत सी डिबगिंग जानकारी के साथ एक पूर्ण और विस्तृत स्टैकट्रेस प्रदर्शित किया जाएगा।
जब आप कर रहे हैं लाइन को दूर करने के लिए मत भूलना!
डिबगर का उपयोग करने के बजाय लेखन, अधिक प्रलेखन, टेस्ट, लॉगिंग और जोर पर विचार करें
डिबगिंग में समय और मेहनत लगती है।
डिबगर के साथ बग का पीछा करने के बजाय, अपने कोड को बेहतर बनाने पर अधिक समय बिताने पर विचार करें:
- टेस्ट लिखें और चलाएं। पायथन और Django में महान बिलिन टेस्टिंग फ्रेमवर्क हैं - जिनका उपयोग डिबगर के साथ मैन्युअल रूप से आपके कोड को बहुत तेजी से परीक्षण करने के लिए किया जा सकता है।
- अपने कार्यों, कक्षाओं और मॉड्यूल के लिए उचित दस्तावेज लिखना । PEP 257 और Google का पायथन स्टाइल गाइड अच्छी डॉकस्ट्रिंग लिखने के लिए अच्छी प्रथाओं की आपूर्ति करता है।
- अपने प्रोग्राम से आउटपुट तैयार करने के लिए लॉगिंग का उपयोग करें - विकास के दौरान और तैनाती के बाद।
- महत्वपूर्ण स्थानों में अपने कोड में
assert
आयन जोड़ें : अस्पष्टता को कम करें, समस्याएं पैदा करें क्योंकि वे बनाई गई हैं।
बोनस: प्रलेखन और परीक्षण के संयोजन के लिए सिद्धांत लिखें!