You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Django-Python纯API后端项目的标准化工作目录结构及技术选型咨询

Django-Python纯API后端项目的标准化工作目录结构及技术选型咨询

嗨,作为常年跟Django API打交道的开发者,太懂你从.NET转过来想要清晰分层的需求了!先直接给你把核心问题说透,再给你一套业内通用的标准化目录结构参考:

一、DRF是不是你的最佳选择?

绝对是!Django REST Framework(DRF) 就是Django生态里做REST API的标准工具,完全适配你的所有需求:

  • 快速搭建~15个端点:用ViewSet、Router可以几行代码生成CRUD接口,自定义接口也很灵活
  • 和Django ORM无缝集成:直接用Django的Models操作PostgreSQL,不用额外写SQL
  • 支持单元测试:和Django自带的测试框架完美兼容,也能配合pytest等工具轻松达到80%以上的覆盖率
  • 轻松集成Swagger UI:用第三方包drf-yasg就能自动生成美观的接口文档,完全满足你的要求

可以说,DRF就是这类项目的行业最佳实践,放心用就对了!

二、对标.NET分层的标准化目录结构

你熟悉的.NET分层(控制器→业务逻辑→数据层),在Django里完全可以对应实现,下面是一套成熟的目录结构,兼顾清晰性和可维护性:

your_project/
├── core/                  # 全局核心配置与通用工具
│   ├── __init__.py
│   ├── settings.py        # Django主配置(数据库、DRF、Swagger等都在这里配置)
│   ├── urls.py            # 项目根路由
│   ├── wsgi.py
│   ├── asgi.py
│   └── utils/             # 通用工具类:加密、日期处理、通用校验等
│       └── __init__.py
├── api/                   # 主API模块,按业务领域拆分
│   ├── __init__.py
│   ├── urls.py            # API总路由,挂载各业务模块的子路由
│   ├── common/            # API通用组件:序列化基类、分页器、权限类等
│   │   └── __init__.py
│   ├── user/              # 示例业务模块:用户管理(可根据你的业务替换)
│   │   ├── __init__.py
│   │   ├── models.py      # 数据模型 → 对应.NET的Entities,和PostgreSQL直接映射
│   │   ├── serializers.py # DRF序列化器 → 处理请求/响应数据的格式转换
│   │   ├── views.py       # 视图/视图集 → 对应.NET的Controllers,处理请求分发
│   │   ├── services.py    # 业务逻辑层 → 对应.NET的Business Logic,封装核心业务规则
│   │   ├── urls.py        # 模块内路由
│   │   └── tests/         # 单元测试目录,覆盖模型、服务、视图
│   │       ├── __init__.py
│   │       ├── test_models.py
│   │       ├── test_services.py
│   │       └── test_views.py
│   └── order/             # 另一个示例业务模块:订单管理
│       ├── __init__.py
│       ├── models.py
│       ├── serializers.py
│       ├── views.py
│       ├── services.py
│       ├── urls.py
│       └── tests/
├── docs/                  # 文档配置模块
│   ├── __init__.py
│   └── schema.py          # Swagger schema配置,用来生成接口文档UI
├── manage.py
├── requirements.txt       # 项目依赖清单:Django、djangorestframework、psycopg2-binary、drf-yasg等
└── pytest.ini             # 测试工具配置(用pytest的话需要,也可以用Django自带测试框架)

各分层对应关系说明:

  • .NET Controllers → DRF Views/ViewSets:视图层只负责接收HTTP请求、调用业务服务、返回响应,尽量薄,不要写业务逻辑
  • .NET Business Logic(带Interfaces)→ Django Services层:把核心业务规则(比如用户注册校验、订单状态流转)放在这里,还可以用Python的abc模块定义抽象基类(模拟接口),比如class IUserService(ABC),再实现具体的UserService,方便测试时替换依赖
  • .NET Data Layer(Models/Entities)→ Django Models:Django的Model本身就是和数据库映射的实体,ORM操作(增删改查)都在这里定义,复杂查询可以用自定义Manager封装

三、满足你需求的关键工具配置

  1. PostgreSQL连接:在core/settings.py里配置DATABASES,用psycopg2-binary作为驱动
  2. Swagger UI:安装drf-yasg,在docs/schema.py里配置文档生成规则,然后在路由里挂载Swagger的端点
  3. 单元测试与覆盖率:用Django自带的TestCase或者pytest写测试,用coverage.py统计覆盖率,确保达到80%以上,配置可以放在pytest.ini或者单独的.coveragerc
  4. 业务逻辑解耦:坚持把业务逻辑放在services层,视图只做请求转发,这样测试的时候可以单独测试服务层,不用依赖HTTP请求

四、小技巧:让结构更贴近.NET风格

如果你习惯用接口(Interfaces)来定义业务逻辑的契约,可以用Python的abc模块实现:

# api/user/services.py
from abc import ABC, abstractmethod

class IUserService(ABC):
    @abstractmethod
    def create_user(self, user_data):
        pass

class UserService(IUserService):
    def create_user(self, user_data):
        # 具体业务逻辑:校验数据、创建用户、发送通知等
        pass

这样在视图或者测试里,可以依赖抽象基类,方便替换实现,和.NET的接口依赖注入思路一致。

备注:内容来源于stack exchange,提问作者Giox

火山引擎 最新活动