首页 后端开发 Python教程 调试模式:Django Docker Pycharm

调试模式:Django Docker Pycharm

Sep 07, 2024 pm 02:02 PM

Debug Mode: Django Docker Pycharm

让本地设置正确调试您正在编写的代码所花费的时间比任何开发人员都愿意承认的要多。我们不要忘记,这主要是一个一次性完成的设置,所以如果我们不写下来,我们就不会记得。这篇文章就是为了解决这个确切的问题! 将此作为如何启动并运行本地开发环境的书面提醒。

先决条件:

  • 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 进行调试

  1. 创建 Python 调试服务器配置:
  2. 在 PyCharm 中导航至“运行 ➡️ 编辑配置”。
  3. 单击 + 按钮并选择 Python 调试服务器。
  4. 将主机设置为 0.0.0.0 或本地计算机的 IP 地址。
  5. 将端口设置为 5679(或您在 Docker 设置中公开的端口)。
  6. 然后点击“保存”!

  7. 启动调试器服务器:
    单击“调试”按钮(绿色错误图标)启动 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 并调试

  1. 构建并运行 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中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
<🎜>掩盖:探险33-如何获得完美的色度催化剂
2 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1676
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
Python与C:学习曲线和易用性 Python与C:学习曲线和易用性 Apr 19, 2025 am 12:20 AM

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

学习Python:2小时的每日学习是否足够? 学习Python:2小时的每日学习是否足够? Apr 18, 2025 am 12:22 AM

每天学习Python两个小时是否足够?这取决于你的目标和学习方法。1)制定清晰的学习计划,2)选择合适的学习资源和方法,3)动手实践和复习巩固,可以在这段时间内逐步掌握Python的基本知识和高级功能。

Python vs.C:探索性能和效率 Python vs.C:探索性能和效率 Apr 18, 2025 am 12:20 AM

Python在开发效率上优于C ,但C 在执行性能上更高。1.Python的简洁语法和丰富库提高开发效率。2.C 的编译型特性和硬件控制提升执行性能。选择时需根据项目需求权衡开发速度与执行效率。

Python vs. C:了解关键差异 Python vs. C:了解关键差异 Apr 21, 2025 am 12:18 AM

Python和C 各有优势,选择应基于项目需求。1)Python适合快速开发和数据处理,因其简洁语法和动态类型。2)C 适用于高性能和系统编程,因其静态类型和手动内存管理。

Python标准库的哪一部分是:列表或数组? Python标准库的哪一部分是:列表或数组? Apr 27, 2025 am 12:03 AM

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

Python:自动化,脚本和任务管理 Python:自动化,脚本和任务管理 Apr 16, 2025 am 12:14 AM

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

科学计算的Python:详细的外观 科学计算的Python:详细的外观 Apr 19, 2025 am 12:15 AM

Python在科学计算中的应用包括数据分析、机器学习、数值模拟和可视化。1.Numpy提供高效的多维数组和数学函数。2.SciPy扩展Numpy功能,提供优化和线性代数工具。3.Pandas用于数据处理和分析。4.Matplotlib用于生成各种图表和可视化结果。

Web开发的Python:关键应用程序 Web开发的Python:关键应用程序 Apr 18, 2025 am 12:20 AM

Python在Web开发中的关键应用包括使用Django和Flask框架、API开发、数据分析与可视化、机器学习与AI、以及性能优化。1.Django和Flask框架:Django适合快速开发复杂应用,Flask适用于小型或高度自定义项目。2.API开发:使用Flask或DjangoRESTFramework构建RESTfulAPI。3.数据分析与可视化:利用Python处理数据并通过Web界面展示。4.机器学习与AI:Python用于构建智能Web应用。5.性能优化:通过异步编程、缓存和代码优

See all articles