Django 項目組成部分剖析
這一小節我們主要介紹用 Django 開發的項目的幾個重要組成部分以及操作的相關命令。
1. Django 項目說明
Django 項目主要是由多個 app 組成,app 這個概念特別像 Java 中的模塊。我們將實現不同的功能放到不同的 app 中,這樣會讓整個項目結構看起來清晰分明。此外,在 Django 給我們生成的初始化工程以及初始化應用中的代碼文件都有著相應的含義,我們需要遵循 Django 規范才能讓整個項目代碼看著結構清晰,功能明確。
2. Django 項目代碼文件說明
在我們前面初次創建 first_django_app 工程時,可以看到 django-admin 命令為我們生成了如下的代碼文件:
[root@server first_django_app]# tree .
.
├── first_django_app
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
2.1 manage.py 文件
manage.py
是一個命令行工具,用于與 Django 進行不同方式的交互腳本,通過 python manage.py help
命令,我們可以看到 manage.py
文件支持的所有操作:
(django-manual) [root@server first_django_app]# python manage.py help
Type 'manage.py help <subcommand>' for help on a specific subcommand.
Available subcommands:
[auth]
changepassword
createsuperuser
[contenttypes]
remove_stale_contenttypes
[django]
check
compilemessages
createcachetable
dbshell
diffsettings
dumpdata
flush
inspectdb
loaddata
makemessages
makemigrations
migrate
sendtestemail
shell
showmigrations
sqlflush
sqlmigrate
sqlsequencereset
squashmigrations
startapp
startproject
test
testserver
[sessions]
clearsessions
[staticfiles]
collectstatic
findstatic
runserver
比較常用的命令有:
-
createsuperuser:創建超級用戶,用來登錄 Django 自帶的管理系統;
-
shell:進入shell 模式可以直接對 Django 中的模型進行增刪改查等測試,這個后續介紹 Django 的 ORM 模型中使用;
-
makemigrations/migrate:用來進行數據庫遷移工作的,比如我們修改了數據庫的表的字段,然后需要保存修改,直接使用
makemigrations
生成遷移文件,然后到了新環境使用migrate
命令根據遷移文件生成相應的數據表; -
showmigrations:查看遷移表中的信息;
(django-manual) [root@server first_django_app]# python manage.py showmigrations admin [ ] 0001_initial [ ] 0002_logentry_remove_auto_add [ ] 0003_logentry_add_action_flag_choices auth [ ] 0001_initial [ ] 0002_alter_permission_name_max_length [ ] 0003_alter_user_email_max_length [ ] 0004_alter_user_username_opts [ ] 0005_alter_user_last_login_null [ ] 0006_require_contenttypes_0002 [ ] 0007_alter_validators_add_error_messages [ ] 0008_alter_user_username_max_length [ ] 0009_alter_user_last_name_max_length [ ] 0010_alter_group_name_max_length [ ] 0011_update_proxy_permissions contenttypes [ ] 0001_initial [ ] 0002_remove_content_type_name sessions [ ] 0001_initial
-
startproject/startapp:創建項目和應用。這里我們發現它的作用和前面使用
django-admin startproject/startapp
作用是一樣的; -
runserver:在調試時會常常使用。例如下面的操作,啟動 Django 內置的 Web 服務器,監聽8000端口,等待 HTTP 請求:
(django-manual) [root@server first_django_app]# python manage.py runserver 0.0.0.0:8000 Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run 'python manage.py migrate' to apply them. March 14, 2020 - 13:47:04 Django version 2.2.11, using settings 'first_django_app.settings' Starting development server at http://0.0.0.0:8000/ Quit the server with CONTROL-C.
2.2 first_django_app/settings.py 文件
Django 的全局配置文件,非常重要。這里將介紹 setting.py
中非常重要的一些配置:
-
DEBUG:調試開關,生產環境絕對禁止;
-
ALLOWED_HOSTS : 訪問地址白名單,如果想讓所有機器都能訪問,直接設置
['*']
即可; -
INSTALLED_APPS:非常重要,所有使用
startapp
生成的應用,必須在這里添加; -
MIDDLEWARE:Django 的中間件,幫助我們在視圖函數執行之前和執行之后做一些額外的操作;
-
ROOT_URLCONF:指定全局的 URL 映射入口地址;
-
DATABASES: 數據庫配置,在這里可以指定單個數據庫或者多個數據庫;
-
STATIC_URL: 靜態資源地址。
2.3 first_django_app/urls.py
Django 的 URL 映射入口,非常重要。URL 路由配置實質上就是一個 URL 與視圖函數之間的映射表。我們在瀏覽器上敲下 URL 時,瀏覽器會根據指定的 IP + PORT 找到我們這個 Django 服務,然后通過 URL 后續的 path 部分來到這里映射的總入口一行行匹配,直到找到匹配的視圖函數處理;否則在遍歷完映射表后會返回 404 錯誤。
2.4 first_django_app/wsgi.py
一個基于 WSGI 的web服務器進入點,提供底層的網絡通信功能。在使用 uWSGI 服務器啟動時,指定好該位置即可。
3. Django 應用文件說明
接下來,我們進入創建的應用目錄中,來看下初始的應用代碼文件有哪些。
(django-manual) [root@server first_django_app]# cd hello_app/
(django-manual) [root@server hello_app]# ls
admin.py apps.py __init__.py migrations models.py tests.py views.py
(django-manual) [root@server hello_app]# tree .
.
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
1 directory, 7 files
-
admin.py
:映射 models 中的數據到 Django 自帶的 admin 后臺,里面的代碼; -
app.py
:這個在Django 2.0 版本中新增,只有一個類,設置了應用的名稱;from django.apps import AppConfig class HelloAppConfig(AppConfig): name = 'hello_app'
-
migrations
:目錄,這里將會放這個應用對應遷移的數據表。在項目開發過程中或者完成后,我們會通過python manage.py makemigrations app_name
將該應用的數據表結構以及必要數據保存到這個目錄下,方便后續數據遷移; -
models.py
:這個文件是專門用來定義應用中涉及的數據表模型(大部分時候對應的數據表); -
tests.py
:很明顯,這個是用來寫測試用例的文件; -
view.py
:這里是用來編寫 URL 對應的視圖函數的,這里一般放著應用所有業務的邏輯處理代碼。
以上這些代碼文件是 Django 在創建應用時給我們自動生成的,通常我們不會改動這些文件名,而是直接在對應的文件中編寫相應的代碼,這些都是 Django 自己的規范,也是為了使項目中代碼文件的功能清晰明了。但是,往往 Django 應用中,我們會添加很多自己的代碼文件,最重要的有兩個:urls.py
和 serializers.py
:
-
urls.py
:將本應用的 URL 與 視圖映射關系放到這個文件中; -
serializers.py
: 將應用中數據庫模型字段的序列化和反序列化邏輯放到這個文件中統一處理。
4. 小結
本小節我們介紹了 Django 在最開始生成第一個工程的重要文件,接下來也對生成應用的代碼文件進行了說明,這些都是后續開發 Django 項目的基礎。