概要: | 運行Werkzeug調試器的RunServerPlus典型runserver |
---|
介紹
此項要求您安裝了Werkzeug WSGI實用程序。Werkzeug包含一個kick ass調試器,它可以提供良好的調試回溯並添加一個基於AJAX的調試器(允許在traceback的幀的上下文中執行代碼)。此外,它提供了一個很好的源代碼訪問視圖。
入門
要開始,我們只使用runserver_plus命令而不是普通的 runserver命令:
$ python manage.py runserver_plus
* Running on http://127.0.0.1:8000/
* Restarting with reloader...
Validating models...
0 errors found
Django version X.Y.Z, using settings 'screencasts.settings'
Development server is running at http://127.0.0.1:8000/
Using the Werkzeug debugger (http://werkzeug.pocoo.org/)
Quit the server with CONTROL-C.
注意:所有正常的runserver選項都適用。換句話說,如果您需要更改端口號或主機信息,您可以像平常一樣進行更改。
用法
當發生異常時,將顯示Werkzeug回溯頁面,而不是默認的Django回溯頁面。

除了典型的追溯信息,我們還有幾個選項。將鼠標懸停在特定的追溯線上時會出現這些選項。請注意,右側有兩個按鈕:

選項是:
查看源
這將顯示回溯下方的源:

能夠查看源文件非常方便,因為它提供了有關錯誤的更多上下文信息。實際的追溯區域突出顯示,因此很容易發現。
UI的一個尷尬方面是頁面不會滾動到底部。起初我認為沒有發生任何事情因為這個。
交互式調試控制台
單擊此按鈕可打開您所在的追溯線下的新窗格。這是拍攝的錢:

基於ajax的控制台出現在窗格中,您可以開始調試。請注意,在上面的屏幕截圖中,我做了一個print environ,以查看進入該函數的環境參數中的內容。
警告:絕不能在任何類型的生產環境中使用它。甚至沒有快速問題檢查。我不能強調這一點。交互式調試器允許您針對服務器評估python代碼。你被警告過了。
SSL
runserver_plus還支持SSL,因此您可以輕松調試使用https時彈出的錯誤。要使用SSL,只需提供證書的文件名; 將自動生成密鑰和證書文件:
$ python manage.py runserver_plus --cert-file cert.crt
Validating models...
0 errors found
Django version X.Y.Z, using settings 'mysite.settings'
Development server is running at http://127.0.0.1:8000/
Using the Werkzeug debugger (http://werkzeug.pocoo.org/)
Quit the server with CONTROL-C.
* Running on https://127.0.0.1:8000/
* Restarting with reloader
Validating models...
0 errors found
Django version X.Y.Z, using settings 'mysite.settings'
Development server is running at http://127.0.0.1:8000/
Using the Werkzeug debugger (http://werkzeug.pocoo.org/)
Quit the server with CONTROL-C.
運行此命令后,可以通過https://127.0.0.1:8000訪問您的Web應用程序 。
您還會發現在當前工作目錄中創建了兩個文件:密鑰文件和證書文件。如果再次運行上述命令,將重復使用這些證書文件,這樣您就不必每次都從瀏覽器繼續接受自己生成的證書。如果您已經擁有證書,您還可以為要使用的證書提供特定文件:
$ python manage.py runserver_plus --cert-file /tmp/cert.crt
請注意,如果要重用現有證書,則需要使用OpenSSL庫和Werkzeug 0.9或更高版本。
要安裝OpenSSL:
$ pip install pyOpenSSL
證書路徑
您可以配置.crt和.key文件的不同路徑。至少有一個--cert-file
或--key-file
必須定義為使用SSL。
您可以使用--cert-file
選項或不建議使用的--cert
選項(目前是別名)將路徑設置為.crt文件--cert-file
。如果未設置此選項,則runserver_plus假定該選項與該文件位於同一目錄中--key-file
。
您可以使用--key-file
選項將路徑設置為.key文件。如果未設置此選項,則runserver_plus假定該選項與該文件位於同一目錄中--cert-file
。
如果要創建新文件,則可以在沒有擴展名的情況下傳遞文件名。將創建具有此名稱和.crt和.key擴展名的正確文件。
配置
該RUNSERVERPLUS_SERVER_ADDRESS_PORT設置可以被配置為指定地址和端口的開發服務器應該綁定。
如果您發現自己頻繁啟動服務器:
$ python manage.py runserver_plus 0.0.0.0:8000
您可以使用設置自動將開發默認為地址/端口:
RUNSERVERPLUS_SERVER_ADDRESS_PORT = '0.0.0.0:8000'
要確保Werkzeug可以登錄到控制台,您可能需要在設置中添加以下內容:
LOGGING = { ... 'handlers': { ... 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', }, }, 'loggers': { ... 'werkzeug': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': True, }, }, }
IO調用和CPU使用
如gh625中所述, runserver_plus可以看到使用大量CPU並在空閑時生成許多I / O.
這是由於Werkzeug實施自動重新加載功能的方式。它支持兩種通過stat輪詢或文件系統事件進行自動重新加載的方法。
該統計輪詢方法是相當蠻力和汽車無問題STAT這會導致CPU和IO負載系統調用。
如果可能的話嘗試安裝Watchdog軟件包,這應該會自動導致Werkzeug使用 文件系統事件。
您可以在Werkzeug文檔中閱讀更多相關信息
使用默認值1秒的統計輪詢時,您還可以增加輪詢間隔。這將減少CPU負載,但代價是文件編輯需要更長時間才能獲取。
這可以在django設置文件中設置兩種方式:
RUNSERVERPLUS_POLLER_RELOADER_INTERVAL = 5
或作為一個commad行參數:
$ python manage.py runserver_plus --reloader-interval 5
調試器
從Werkzeug 0.11開始,調試器還受PIN保護。這是一個安全幫助程序,使得調試程序在生產中被利用的可能性降低,因為人們發生了使調試器保持活動狀態的問題。默認情況下啟用基於PIN的身份驗證。
當調試器出現時,首次使用時它將提示輸入打印到命令行的PIN。PIN以特定於項目的穩定方式生成。在某些情況下,可能無法在重新啟動之間生成穩定的PIN,在這種情況下,可以通過環境變量WERKZEUG_DEBUG_PIN提供顯式PIN。這可以設置為一個數字,並將成為PIN。此變量也可以設置為off值以完全禁用PIN檢查。
--nopin
調用runserver_plus命令時,也可以通過傳遞參數來禁用PIN 。
如果PIN輸入錯誤太多次,則需要重新啟動服務器。
此功能不應該完全保護調試器。它旨在使攻擊者更難以利用調試器。切勿在生產中啟用調試器。