django 默认生成的项目结构,当创建的app多了以后,看起来就会很乱,所以我做了一些调整

目录结构

.
├── project001
│   ├── manage.py
│   ├── apps # 所有app放在这个目录下
│   │   ├── app1
│   │   │   ├── __init__.py
│   │   │   ├── admin.py
│   │   │   ├── apps.py
│   │   │   ├── models.py
│   │   │   ├── tests.py
│   │   │   ├── urls.py
│   │   │   └── views.py
│   │   ├── app2
│   │   ├── app3
│   ├── config # 这个目录是由 project001 改名而来,存的是django的配置
│   │   ├── __init__.py
│   │   ├── asgi.py
│   │   ├── settings.py
│   │   ├── urls.py
│   │   └── wsgi.py
└── pyproject.toml

配置文件 settings.py

配置文件里,INSTALLED_APPS加载app的时候,前面加个 apps

# config/settings.py
 
...
INSTALLED_APPS = [
    ...
    'apps.app1',
    'apps.app2',
    'apps.app3',
]
...
 

manage.py

要修改 DJANGO_SETTINGS_MODULE 的值, 从 project001.settings 修改为 config.settings

# manage.py
 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
 

settings.py 文件的技巧

通常我们可能会直接修改 settings.py 文件 里的变量, 比如

直接把 LANGUAGE_CODE 改成 "zh-hans" , 等等 。。

直接修改有一个坏处,那就是 修改的地方多了, 看起来就会很乱

我目前的方法是,覆盖 settings.py 里的变量

我这样的好处是,当我需要的时候,我可以直接删除 覆盖的配置, 就可以恢复 到默认的配置

# config/settings.py
 
.... (这里是默认的配置,我们不直接修改)
 
# ==========  下方 覆盖配置  ==========
# ==========  下方 覆盖配置  ==========
 
# 覆盖默认的配置
LANGUAGE_CODE = "zh-hans"
TIME_ZONE = 'asia/shanghai'
 
 
 
# 先来第三方app的配置
 
# django-apscheduler start
INSTALLED_APPS += [
    "django_apscheduler",
]
APSCHEDULER_DATETIME_FORMAT = 'Y-m-d H:i:s'
APSCHEDULER_RUN_NOW_TIMEOUT = 25  # Seconds
# django-apscheduler end
 
 
# 我的app,需要落后于 第三方app
INSTALLED_APPS += [
    "apps.task",
]
 

其实配置覆盖,还有更清爽的办法,那就是 直接在新文件里覆盖,步骤如下:

1、把原来的 settings.py 改名为 settings_default.py

2、新建一个 settings.py 文件, 在 settings.py 里,引用 settings_default.py, 然后 覆盖变量,添加自己的配置

# settings.py
from .settings_default import * # 导入 默认配置里所有的配置项
 
# 覆盖默认的配置
LANGUAGE_CODE = "zh-hans"
TIME_ZONE = 'asia/shanghai'
 
 
# 先来第三方app的配置
 
# django-apscheduler start
INSTALLED_APPS += [
    "django_apscheduler",
]
APSCHEDULER_DATETIME_FORMAT = 'Y-m-d H:i:s'
APSCHEDULER_RUN_NOW_TIMEOUT = 25  # Seconds
# django-apscheduler end
 
 
# 我的app,需要落后于 第三方app
INSTALLED_APPS += [
    "apps.task",
]
 
 
 
 

最后总结

我现在创建django项目的步骤是:

1、django-admin startproject config (好处是不需要修改 manage.py 文件里的DJANGO_SETTINGS_MODULE 值)

2、 把外层的目录 config 改名为 项目名字, 比如改为 blog

3、 在blog目录下 创建目录 apps,用来存放各种 app

4、 django-admin startapp app1 , 然后把生成的目录,移动到 apps 目录下

5、 按照我前面说的步骤,根据需要 修改 settings.py 文件