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封装
三、满足你需求的关键工具配置
- PostgreSQL连接:在
core/settings.py里配置DATABASES,用psycopg2-binary作为驱动 - Swagger UI:安装
drf-yasg,在docs/schema.py里配置文档生成规则,然后在路由里挂载Swagger的端点 - 单元测试与覆盖率:用Django自带的
TestCase或者pytest写测试,用coverage.py统计覆盖率,确保达到80%以上,配置可以放在pytest.ini或者单独的.coveragerc里 - 业务逻辑解耦:坚持把业务逻辑放在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




