Django 项目后端模板

Django 项目本身可以通过 django-admin 或者直接运行 python manage.py ARGS 来进行脚手架生成。但是生成的项目框架层次不算太好。

首先生成一个 Django 项目:

1
django-admin startproject backend

生成的项目框架如下:

1
2
3
4
5
6
7
backend
├── backend
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

其中的两个 backend 分别表示项目,以及 app 全局配置

建立文件夹 apps 用来放置应用,把内层 backend 改为 conf

1
2
3
4
5
6
7
8
backend
├── apps
├── conf
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py

注意这里需要配置以下几个文件:

1
2
3
4
5
# manage.py 
...
# os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'conf.settings')
...
1
2
3
4
5
6
7
8
# settings.py
...
# ROOT_URLCONF = 'backend.urls'
ROOT_URLCONF = 'conf.urls'
...
# WSGI_APPLICATION = 'backend.wsgi.application'
WSGI_APPLICATION = 'conf.wsgi.application'
...

现在可以测试 python manage.py runserver 是否可以起来。

接下来新建 Apps

1
2
mkdir apps/login
python manage.py startapp login apps/login

注册 app

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# settings.py

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['apps'], # 添加 apps 文件夹
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]


INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',

'apps.login',
]

导入 URL

1
2
3
4
5
6
7
...
from apps.login import urls as login_urls

urlpatterns = [
path('admin/', admin.site.urls),
path('login/', include(login_urls)),
]

现在一个基本的项目结构就建立好了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
backend
├── apps
│ └── login
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── conf
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── db.sqlite3
└── manage.py

相比起来层次更清晰,而且也更适合用作前后端分离的命名