如果你有能力开发适合自己的应用,你可以在user_space中进行自行开发。
使用python manage.py create_app my_app,可快速创建插件开发目录,支持传统模式和文件夹模式.python manage.py create_app --help可查看全部功能
usage: manage.py create_app [-h] [--description DESCRIPTION] [--no-deps] [--no-reqs]
[--traditional] [--minimal] [--version] [-v {0,1,2,3}]
[--settings SETTINGS] [--pythonpath PYTHONPATH] [--traceback]
[--no-color] [--force-color] [--skip-checks]
app_name
在user_space/apps/目录下创建新的CMS应用包(支持两种结构模式)
positional arguments:
app_name 应用名称
options:
-h, --help show this help message and exit
--description DESCRIPTION
应用描述
--no-deps 不创建dependencies.txt文件
--no-reqs 不创建requirements.txt文件
--traditional 使用传统单文件结构(而不是模块化目录结构)
--minimal 创建最小化结构(只包含必需文件)
--version Show program's version number and exit.
-v, --verbosity {0,1,2,3}
Verbosity level; 0=minimal output, 1=normal output, 2=verbose
output, 3=very verbose output
--settings SETTINGS The Python path to a settings module, e.g.
"myproject.settings.main". If this isn't provided, the
DJANGO_SETTINGS_MODULE environment variable will be used.
--pythonpath PYTHONPATH
A directory to add to the Python path, e.g.
"/home/djangoprojects/myproject".
--traceback Display a full stack trace on CommandError exceptions.
--no-color Don't colorize the command output.
--force-color Force colorization of the command output.
--skip-checks Skip system checks.模式对比
1. 模块化目录结构(默认模式)
- 默认模式,无需额外参数
- 使用
admin/、models/、views/、utils/等目录组织代码 - 适合大型复杂应用,便于代码管理和团队协作
2. 传统单文件结构(传统模式)
- 使用
--traditional参数 - 使用
admin.py、models.py、views.py等单文件结构 - 符合Django标准结构,适合小型简单应用
使用示例
示例1:创建博客系统(模块化结构)
blog/models/example.py):blog/models/post.py):blog/admin/post.py):示例2:创建简单工具应用(传统结构)
calculator/models.py):calculator/admin.py):两种模式的对比表
特性 | 模块化目录结构 | 传统单文件结构 |
|---|---|---|
创建命令 | python manage.py create_app appname | python manage.py create_app appname --traditional |
结构特点 | 按功能分目录,模块化组织 | 按文件类型分文件,集中管理 |
适用场景 | 大型复杂应用,多模型/多视图 | 小型简单应用,功能单一 |
代码组织 | 高内聚,低耦合 | 集中管理,便于查找 |
文件数量 | 较多 | 较少 |
团队协作 | 减少冲突,便于分工 | 容易产生冲突 |
维护性 | 高,便于扩展和维护 | 中,文件过大会难以维护 |
Django兼容 | 完全兼容 | 完全兼容 |
学习曲线 | 稍高 | 简单 |
推荐使用场景
使用模块化目录结构的场景:
- 大型系统:如电商平台、CMS系统
- 复杂功能:涉及多个模块,如用户、商品、订单
- 团队开发:多人协作,需要代码分离
- 长期维护:需要持续迭代和扩展
- 代码复用:需要在不同项目中复用模块
使用传统单文件结构的场景:
- 小型工具:如计算器、单位转换
- 简单功能:只有1-2个模型和视图
- 快速原型:验证概念,快速开发
- 个人项目:单人开发,无需复杂结构
- 教学示例:便于理解和演示
如何选择?
- 如果你不确定,使用模块化目录结构(默认):
- 更灵活,便于后续扩展
- 即使现在简单,以后也可以轻松扩展
- 培养良好的代码组织习惯
- 只有明确知道应用很小且不会扩展时,才使用传统结构:
- 真正的微型工具应用
- 一次性脚本或简单接口
- 概念验证项目
混合使用建议
- 使用模块化结构创建主要应用
- 使用传统结构创建简单的工具应用
- 在模块化应用中,也可以将某些简单功能放在单文件中
创建命令的完整选项
核心逻辑说明
user_space路径用来第三方开发,具体结构如下:
传统模式
user_space
|-apps#应用路径,可以在apps下加入完整的应用包
|--appname
|---migrations
|---__init__.py#包声明文件
|---admin.py
|---apps.py
|---models.py
|---urls.py
|---tests.py
|---views.py
|---other#其他相关文件
|-templates#开发应所需模板,主要用于admin中的,前端的请在根目路下的主题中调用
|--admin#admin模板路径
|-static
|-dependencies.txt 须加入installed_app的依赖声明,一行一个,只写引导的名字即可
|-requirements.txt 第三方依赖包,名称 == 版本号 apps.py
一定要加入ready部分,这样才可以将这里的app的urls注册到系统中
from django.apps import AppConfig
from apps.core.services.route_service import register_app_urls
class SoftwareConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'user_space.apps.appname'
verbose_name = 'app管理'
def ready(self):
# 自动注册路由
register_app_urls(
prefix="appname", # URL前缀
app_name=self.name # 应用命名空间
)
urls.py
# user_space/apps/software/urls.py
from django.urls import path
app_name = "appname"
urlpatterns = [
#路径写法和正常一样
# path('list/', views, name='list'),
]
这样在系统启动时,会将uses_space中的应用一起注册到系统中