博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一种可能的 Django 目录布局
阅读量:6802 次
发布时间:2019-06-26

本文共 1395 字,大约阅读时间需要 4 分钟。

hot3.png

在使用 Flask 开发了较多 Web API 以后,最近突然想在项目里再尝试一下 Django + REST framework 的架子。因为在很多弱需求下,这套框架总是更能让需求方感到安心[摊手]。自己也希望通过这次重新接触,加深对开发模式(套路)的理解。

项目是一个 CMS 系统,特点是 PV 较小,对延迟也不敏感,但业务逻辑较复杂(预计最终数据表的数量在50+),且需求并不明确(表结构和接口变化较快),另外接口稳定性要求很高。为了适应这种需求,希望能够把项目模块化,或者时髦一点叫做微服务,避免过度耦合导致后期无法维护。(友商们的该系统都已进入这种状态)

最初接手时该项目已经是一个半成品,建立了 20+ 个 app,且 app 间互相引用 model,各种外键。于是我决定重构项目,首先依业务逻辑的亲疏将 model 们重新分 app,然后定立了几条规矩:

  1. 不同 app 间禁止 import,更不许有外键
  2. 不同 app 间交互全部通过接口调用实现
  3. 一个 app 内的逻辑不关心外部需求,只通过发布/订阅模式进行异步通知
  4. 对于第三条不能满足的强事务需求,设计特殊的机制实现,但应尽量避免这种需求

最后 app 被紧缩为了 3 个。然后我又遇到了一个麻烦的问题:项目的目录布局如何设计。似乎我总是在这个问题上过于纠结,之前写一个 flask API 项目时也在这个问题上纠结了好几天(实际项目只写了三周)。最后在参阅了各种别人的实现后定义为下:(其实下表才是我这次博客的本来目的,一不小心多写了很多)

|——cms       |——docs             |——...       |——cms             |——apps                    |——app1                    |——app2                    |——...             |——common             |——lib             |——settings                    |——base.py                    |——instance.py             |——urls.py             |——wsgi.py       |——.git       |——fabfile.py       |——manage.py       |——REAMME.rst       |——requirements.txt

基本的想法就是:

  1. 不希望目录太深
  2. 最外层需要一个管理目录,业务代码放在第二层
  3. settings 需要支持分环境可配,但又不想搞很多什么 dev.py, local.py, production.py 这样的文件。我觉得就分为一个 base,放环境无关的配置,和 instance,放环境相关的配置就可以了。instance.py 文件则在部署时进行注入。
  4. Django 默认把管理 app(含 wsgi 的那个)和业务 app 放在一个目录下我感觉很别扭,所以单建了一个 apps 目录,所有 startapp 都指向这个目录。

转载于:https://my.oschina.net/lionets/blog/854102

你可能感兴趣的文章
《MacTalk 跨越边界》一一3.1 程序员真正的价值
查看>>
Grumpy: Go 上运行 Python!
查看>>
《IPv6精髓(第2版)》——3.8 链路本地地址和站点本地地址
查看>>
《人工智能:计算Agent基础》——3.7 更复杂的搜索方
查看>>
《深入浅出iPhone/iPad开发(第2版)》——使用GUI编辑器连接UI控制到代码
查看>>
Egg.js 1.2.1 发布,阿里开源的企业级 Node.js 框架
查看>>
【秒懂设计模式】总述及工厂模式
查看>>
《数据科学:R语言实现》——3.10 重塑数据
查看>>
《抓住听众心理——演讲者要知道的100件事》一16.时间是相对的
查看>>
运维前线:一线运维专家的运维方法、技巧与实践1.8 运维自动化依赖的团队模型...
查看>>
《树莓派渗透测试实战》——第1章 树莓派和Kali Linux基础知识
查看>>
《圣殿祭司的ASP.NET4.0专家技术手册》----1-7 HTML5与CSS3的支持
查看>>
数据结构之链表
查看>>
八年了必须放手了,我不是你妈妈
查看>>
cmd如何实现快速粘贴复制
查看>>
《Hadoop海量数据处理:技术详解与项目实战(第2版)》一1.2 Hadoop和大数据
查看>>
精通Python网络爬虫:核心技术、框架与项目实战.3.4 网页分析算法
查看>>
ROS机器人程序设计(原书第2版)2.4.6 如何使用主题与节点交互
查看>>
Eric S. Raymond 五部曲
查看>>
《Ansible权威指南 》一2.7 本章小结
查看>>