Django应用中非Django框架的.py文件存放最佳实践咨询
在Django应用内创建专用子目录存放非框架核心代码,这是最常用的合规方案,完全适配Python包的组织规则。比如给爬取逻辑建
scrapers目录,给通用自定义函数建utils目录,也可以按业务逻辑合并成services目录。只要在每个子目录里放一个空的__init__.py文件,Python就会把它识别为可导入的包。
示例目录结构:your_app/ ├── __init__.py ├── views.py ├── models.py ├── scrapers/ │ ├── __init__.py │ ├── product_scraper.py │ └── news_scraper.py └── utils/ ├── __init__.py └── data_processor.py之后在views.py里就能直接导入:
from your_app.scrapers.product_scraper import crawl_product_data按业务功能而非文件类型划分模块(进阶优化)
如果你的爬取和自定义函数是为了完成同一类业务(比如处理电商数据),可以把相关逻辑放在同一个子模块下,比如ecommerce_data/,里面再分scraper.py和processor.py,这样更便于维护,不会出现跨目录调用的混乱。用服务层封装复杂逻辑
如果爬取+数据处理的流程比较长,可以在应用内建services目录,把整个流程封装成一个或多个服务函数/类。视图只需要调用服务层的接口,不用关心内部的爬取和处理细节,进一步降低视图的复杂度。比如:# your_app/services/data_service.py from ..scrapers.product_scraper import crawl_data from ..utils.data_processor import clean_data def get_cleaned_product_data(): raw_data = crawl_data() return clean_data(raw_data)视图里只需要
from your_app.services.data_service import get_cleaned_product_data,一行代码就能完成调用。始终保持单一职责
每个文件只负责一件事:比如一个爬取文件只处理一个网站的爬取逻辑,一个工具文件只封装一类通用函数,避免把不相关的代码混在一起。
内容的提问来源于stack exchange,提问作者s_m_lima

