关于Python Django框架更合理的项目结构讨论

在 API 接口开发过程中,我使用了 Django Rest Framework. 使用 Django 原始的项目结构进行开发时感觉不够流畅,不知道大家有没有同感

为此, 我自己设计了一个比较舒适的结构进行 API 接口的开发. 我参考了许多 Django 项目以及其它语言类似的框架的项目结构.

大家可以看看哪里可以一起优化的.

目录结构(博客项目举例)

{app.name}
   api/
        __init__.py
        urls.py
        tasks.py
        models.py
        migrations/
            __init__.py
        docs/
            users.md
            blogs.md
            catagries.md
            comments.md
            tags.md
        tests/
            __init__.py
            test_users.py
            test_blogs.py
            test_comments.py
            test_tags.py
            test_catagries.py
        resources/
            __init__.py
            users.py
            blogs.py
            catagries.py
            tags.py
            comments.py
config/
    __init.py
    common.py
    dev.py
    prod.py

celery.py
manage.py
wsgi.py
fabfile.py
.gitignore
mkdocs.yml
requirements.txt

  • 其中 resources 文件夹下每个文件代表一种资源,如 users.py 代表与 user 有关的所有接口都在这儿.
  • 一个 users.py 中同时包含 Serializer,ViewSet,Permission,而不是像之前那样全部分开到 permissions.py,serializers.py,views.py 中.
  • 我个人主观感觉这样逻辑更清晰,写起来更舒适,.

不知道大家有什么开发?


关于Python Django框架更合理的项目结构讨论

8 回复

你这个,,一个文件,即写了 view 又写了 Serializer,ViewSet,Permission 等,个人认为,晦涩难懂,代码文件太长,还是因人而意吧,弱弱的问一句,tests 你放哪儿?


在Django项目中,合理的结构能显著提升可维护性。核心原则是保持应用(app)的单一职责,将项目拆分为功能独立的模块。

一个典型的推荐结构如下:

myproject/
├── myproject/          # 项目配置目录
│   ├── __init__.py
│   ├── settings/
│   │   ├── __init__.py
│   │   ├── base.py      # 基础配置
│   │   ├── local.py     # 开发环境
│   │   └── production.py # 生产环境
│   ├── urls.py
│   └── wsgi.py
├── apps/               # 应用目录
│   ├── __init__.py
│   ├── users/          # 用户管理应用
│   └── products/       # 商品应用
├── static/             # 静态文件
├── media/              # 用户上传文件
├── templates/          # 全局模板
├── requirements/
│   ├── base.txt
│   ├── local.txt
│   └── production.txt
└── manage.py

关键点:

  1. 拆分settings:通过环境变量DJANGO_SETTINGS_MODULE加载不同配置(如myproject.settings.local)。
  2. 集中管理应用:所有自定义应用放在apps/目录下,需在settings.py中通过sys.path添加路径。
  3. 应用内部结构:每个应用应包含models.pyviews.pyurls.py等,复杂时可拆分为views/models/包。

对于大型项目,可进一步按领域驱动设计划分更细的子域。总之,保持结构扁平清晰,避免过度设计。

建议:根据项目规模选择合适的结构,并在团队内保持一致。

test… 不合理
bash<br> tests/<br> <a target="_blank" href="http://__init__.py" rel="nofollow noopener">__init__.py</a><br> <a target="_blank" href="http://test_users.py" rel="nofollow noopener">test_users.py</a><br> <a target="_blank" href="http://test_blogs.py" rel="nofollow noopener">test_blogs.py</a><br> <a target="_blank" href="http://test_comments.py" rel="nofollow noopener">test_comments.py</a><br> <a target="_blank" href="http://test_tags.py" rel="nofollow noopener">test_tags.py</a><br> <a target="_blank" href="http://test_catagries.py" rel="nofollow noopener">test_catagries.py</a><br>
既然都已经有了 tests 就不用再加 test_了吧,个人感觉



1. 如果分好模块后,users.py 里面的代码量是会比之前全在 views.py 中少的
2. 加 test_是一种约定.

主要还是看对象。

我觉得少的只会是一些 import 或者 from

<two scoops of Django > 里面有专讲结构,看看感觉会对你有很大帮助

看过了,不太适合 API 接口开发的情况

回到顶部