基于整洁架构的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
相关产品推荐
相关产品推荐

