You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于整洁架构的Python项目集成Django启动异常求助

整洁架构下Django与工厂模式启动的解决方案

第一步:调整目录结构(适配整洁架构)

先把Django相关代码规整到infrastructure/ui/django_ui下,保持和Tkinter、Flask的层级一致,示例结构:

your_project/
├── domain/                  # 领域层(实体、业务规则)
├── application/             # 应用层(用例、接口)
├── infrastructure/
│   ├── ui/
│   │   ├── tkinter_ui/      # 现有Tkinter实现
│   │   ├── flask_ui/        # 现有Flask实现
│   │   ├── django_ui/
│   │   │   ├── django_project/  # Django核心配置目录
│   │   │   │   ├── __init__.py
│   │   │   │   ├── settings.py
│   │   │   │   ├── urls.py
│   │   │   │   ├── wsgi.py
│   │   │   ├── apps/            # Django业务应用目录
│   │   │   │   ├── __init__.py
│   │   │   │   ├── myapp/       # 具体Django应用
├── main.py                  # 工厂模式入口

第二步:实现DjangoUI工厂类(main.py中)

核心是正确设置Django环境变量并初始化,替代manage.py的启动逻辑:

import sys
import os
from pathlib import Path

# 把项目根目录加入Python搜索路径,确保所有模块可导入
PROJECT_ROOT = Path(__file__).parent
sys.path.append(str(PROJECT_ROOT))

class DjangoUI:
    def __init__(self):
        # 设置完整的settings模块路径(对应目录结构)
        os.environ.setdefault('DJANGO_SETTINGS_MODULE', 
                              'infrastructure.ui.django_ui.django_project.settings')
        
        # 初始化Django核心环境
        import django
        django.setup()

    def run(self):
        # 调用Django内置的runserver命令,等效于manage.py runserver
        from django.core.management import execute_from_command_line
        execute_from_command_line(['manage.py', 'runserver', '0.0.0.0:8000'])

# 现有工厂函数,新增django分支
def create_ui(ui_type):
    if ui_type == 'tkinter':
        # 你的TkinterUI实现
        pass
    elif ui_type == 'flask':
        # 你的FlaskUI实现
        pass
    elif ui_type == 'django':
        return DjangoUI()
    else:
        raise ValueError(f"不支持的UI类型: {ui_type}")

if __name__ == '__main__':
    # 启动DjangoUI,可通过命令行参数动态切换
    ui = create_ui('django')
    ui.run()

第三步:解决两类常见错误

1. 「模块找不到」错误

  • 确保django_project和apps目录下都有__init__.py(Python3.3+可省略,但建议添加以兼容旧环境)。
  • 检查sys.path是否正确加入了项目根目录:可以在main.py中打印print(sys.path)确认。
  • Django应用的INSTALLED_APPS配置要写完整路径,比如你的应用在infrastructure.ui.django_ui.apps.myapp,则settings.py中要写:
    INSTALLED_APPS = [
        # 内置应用
        'django.contrib.admin',
        # 自定义应用
        'infrastructure.ui.django_ui.apps.myapp',
    ]
    

2. 「WSGI应用加载失败」错误

  • 检查django_project/wsgi.py的配置,必须和main.py中的DJANGO_SETTINGS_MODULE保持一致:
    import os
    from django.core.wsgi import get_wsgi_application
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 
                          'infrastructure.ui.django_ui.django_project.settings')
    application = get_wsgi_application()
    
  • 确认settings.py中的ALLOWED_HOSTS包含你要访问的主机,比如ALLOWED_HOSTS = ['localhost', '127.0.0.1']。
  • 如果用外部WSGI服务器(如gunicorn),启动时指定完整的应用路径:
    gunicorn infrastructure.ui.django_ui.django_project.wsgi:application
    

第四步:适配整洁架构原则

  • Django的视图、模板、静态文件等UI代码严格放在infrastructure/ui/django_ui下,不得直接依赖领域层。
  • 业务逻辑全部放在domain或application层,Django视图仅作为入口,调用应用层的用例或接口。

内容的提问来源于stack exchange,提问作者Maycol Teles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 15:11:21