讓本地設定正確調試您正在編寫的程式碼所花費的時間比任何開發人員都願意承認的要多。我們不要忘記,這主要是一個一次性完成的設置,所以如果我們不寫下來,我們就不會記得。這篇文章就是為了解決這個確切的問題! 將此作為如何啟動並運行本地開發環境的書面提醒。
先決條件:
- PyCharm Professional(用於 Docker 支援)
- Docker 和 Docker Compose
- Django REST Framework (DRF) 應用程式
除了偵錯模式所需的更新之外,本文不會介紹有關 Django、Docker 或 Docker Composer 設定的詳細資訊。它假設您已經掌握瞭如何使該部件工作的實用知識。
第 1 步:用於調試的 Dockerfile 設定
將 Dockerfile 設定為在開發模式下運作並允許來自 PyCharm 偵錯器的連線。
下面是一個 Dockerfile 範例:
# Builder stage FROM python:3.9-slim as builder RUN chmod 1777 /tmp # Install system dependencies RUN apt-get update && apt-get install -y \ libpq-dev \ build-essential WORKDIR /app # Copy the requirements file into the container COPY requirements.txt /app/ RUN pip install --no-cache-dir -r requirements.txt > pip_install.log # Copy the current directory contents into the container COPY . /app # Collect static files RUN python manage.py collectstatic --noinput # Final stage FROM python:3.9-slim # Set environment variables ENV PYTHONUNBUFFERED=1 ENV DJANGO_SETTINGS_MODULE=template.settings.development # Set work directory WORKDIR /app # Copy files from the builder stage COPY --from=builder /app /app # Install pydevd-pycharm for remote debugging and gunicorn for serving RUN pip install gunicorn pydevd-pycharm==241.17890.14 psycopg2-binary # Expose necessary ports EXPOSE 8000 5679 # Web app port and debug port # Entry point for the container ENTRYPOINT ["sh", "-c", "python manage.py runserver 0.0.0.0:8000"]
有關此程式碼的注意事項
- pydevd-pycharm 中的 241.17890.14==241.17890.14 會有所不同,取決於您擁有的 Pycharm 版本
- 我們公開 8000(Web 伺服器連接埠)和 5679(偵錯器連接埠)以供外部存取。
第2步:Docker Compose配置
讓我們的 docker-compose.yml 檔案來配置 Web 服務(Django 應用程式)以及資料庫和其他服務。
這是一個範例 docker-compose.yml:
version: '3' services: web: environment: - DJANGO_ENVIRONMENT=development - DB_HOST=host.docker.internal build: context: . command: > sh -c "python manage.py migrate && python manage.py collectstatic --noinput && python manage.py runserver 0.0.0.0:8000" volumes: - .:/app ports: - "8000:8000" # Expose web port - "5679:5679" # Expose debugger port extra_hosts: - "host.docker.internal:host-gateway" db: image: postgres:13 environment: - POSTGRES_DB=${DB_NAME} - POSTGRES_USER=${DB_USER} - POSTGRES_PASSWORD=${DB_PASSWORD}
讓我們進入程式碼分解
- 我們正在為 Web 伺服器對應連接埠 8000,為 PyCharm 偵錯器對應連接埠 5679。
- extra_hosts 確保您的 Docker 容器可以使用 host.docker.internal 與主機通訊。
步驟 3:設定 PyCharm 進行調試
- 建立 Python 偵錯伺服器設定:
- 在 PyCharm 中導覽至「執行 ➡️ 編輯配置」。
- 點擊 + 按鈕並選擇 Python 偵錯伺服器。
- 將主機設定為 0.0.0.0 或本機的 IP 位址。
- 將連接埠設定為 5679(或您在 Docker 設定中公開的連接埠)。
然後點選「儲存」!
啟動偵錯器伺服器:
按一下「偵錯」按鈕(綠色錯誤圖示)啟動 PyCharm 偵錯器。這將開始偵聽我們設定的連接埠。
第四步:為Django新增遠端偵錯程式碼
在 Django 專案中,您需要在 manage.py 或 wsgi.py 中添加以下程式碼以連接到 PyCharm 偵錯器:
import pydevd_pycharm # Connect to the PyCharm debug server pydevd_pycharm.settrace('host.docker.internal', port=5679, stdoutToServer=True, stderrToServer=True, suspend=False)
此程式碼片段告訴您的 Django 應用程式連接回主機上執行的 PyCharm 偵錯器。 host.docker.internal 解析為 Docker 中的主機,port=5679 與我們先前揭露的連接埠相符。
第 5 步:運行 Docker 並調試
- 建置並運行 Docker: 執行以下命令來啟動容器:
docker-compose up --build
這將建立 Docker 映像並啟動服務,包括在開發模式下執行的 Django。
2。設定斷點:
在 PyCharm 中的 Django 程式碼中設定斷點。斷點應該會起作用,因為您的容器將連接到在連接埠 5679 上執行的 PyCharm 偵錯伺服器。
3。觸發您的程式碼:
現在,在 Django REST Framework API 中觸發任何 HTTP 請求。當程式碼到達斷點時,PyCharm 將暫停執行,讓您可以檢查目前狀態並單步執行程式碼。
第 6 步:故障排除
如果您在執行 Docker 時遇到錯誤“bind: address already in use”,則表示另一個進程已使用連接埠 5679。在這種情況下,您可以:
- 停止 PyCharm 偵錯器並重新啟動 Docker。
- 更改 docker-compose.yml 和 PyCharm 配置中的連接埠以避免衝突。
結論
這是我使用 PyCharm 強大的調試器在 Docker 容器內以開發模式運行 Django REST Framework 應用程式的設定。此設定可以幫助我透過在本地逐行調試程式碼來調試後端程式碼。
透過設定 Docker 容器與 PyCharm 通信,您可以簡化 Django 應用程式的編寫、測試和調試,從而更輕鬆地編寫程式碼!
祝你破解代碼愉快!
以上是調試模式:Django Docker Pycharm的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3漢化版
中文版,非常好用

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),