Django 項(xiàng)目組成部分剖析
這一小節(jié)我們主要介紹用 Django 開發(fā)的項(xiàng)目的幾個重要組成部分以及操作的相關(guān)命令。
1. Django 項(xiàng)目說明
Django 項(xiàng)目主要是由多個 app 組成,app 這個概念特別像 Java 中的模塊。我們將實(shí)現(xiàn)不同的功能放到不同的 app 中,這樣會讓整個項(xiàng)目結(jié)構(gòu)看起來清晰分明。此外,在 Django 給我們生成的初始化工程以及初始化應(yīng)用中的代碼文件都有著相應(yīng)的含義,我們需要遵循 Django 規(guī)范才能讓整個項(xiàng)目代碼看著結(jié)構(gòu)清晰,功能明確。
2. Django 項(xiàng)目代碼文件說明
在我們前面初次創(chuàng)建 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 進(jìn)行不同方式的交互腳本,通過 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:創(chuàng)建超級用戶,用來登錄 Django 自帶的管理系統(tǒng);
-
shell:進(jìn)入shell 模式可以直接對 Django 中的模型進(jìn)行增刪改查等測試,這個后續(xù)介紹 Django 的 ORM 模型中使用;
-
makemigrations/migrate:用來進(jìn)行數(shù)據(jù)庫遷移工作的,比如我們修改了數(shù)據(jù)庫的表的字段,然后需要保存修改,直接使用
makemigrations
生成遷移文件,然后到了新環(huán)境使用migrate
命令根據(jù)遷移文件生成相應(yīng)的數(shù)據(jù)表; -
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:創(chuàng)建項(xiàng)目和應(yīng)用。這里我們發(fā)現(xiàn)它的作用和前面使用
django-admin startproject/startapp
作用是一樣的; -
runserver:在調(diào)試時會常常使用。例如下面的操作,啟動 Django 內(nèi)置的 Web 服務(wù)器,監(jiān)聽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:調(diào)試開關(guān),生產(chǎn)環(huán)境絕對禁止;
-
ALLOWED_HOSTS : 訪問地址白名單,如果想讓所有機(jī)器都能訪問,直接設(shè)置
['*']
即可; -
INSTALLED_APPS:非常重要,所有使用
startapp
生成的應(yīng)用,必須在這里添加; -
MIDDLEWARE:Django 的中間件,幫助我們在視圖函數(shù)執(zhí)行之前和執(zhí)行之后做一些額外的操作;
-
ROOT_URLCONF:指定全局的 URL 映射入口地址;
-
DATABASES: 數(shù)據(jù)庫配置,在這里可以指定單個數(shù)據(jù)庫或者多個數(shù)據(jù)庫;
-
STATIC_URL: 靜態(tài)資源地址。
2.3 first_django_app/urls.py
Django 的 URL 映射入口,非常重要。URL 路由配置實(shí)質(zhì)上就是一個 URL 與視圖函數(shù)之間的映射表。我們在瀏覽器上敲下 URL 時,瀏覽器會根據(jù)指定的 IP + PORT 找到我們這個 Django 服務(wù),然后通過 URL 后續(xù)的 path 部分來到這里映射的總?cè)肟谝恍行衅ヅ?,直到找到匹配的視圖函數(shù)處理;否則在遍歷完映射表后會返回 404 錯誤。
2.4 first_django_app/wsgi.py
一個基于 WSGI 的web服務(wù)器進(jìn)入點(diǎn),提供底層的網(wǎng)絡(luò)通信功能。在使用 uWSGI 服務(wù)器啟動時,指定好該位置即可。
3. Django 應(yīng)用文件說明
接下來,我們進(jìn)入創(chuàng)建的應(yīng)用目錄中,來看下初始的應(yīng)用代碼文件有哪些。
(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 中的數(shù)據(jù)到 Django 自帶的 admin 后臺,里面的代碼; -
app.py
:這個在Django 2.0 版本中新增,只有一個類,設(shè)置了應(yīng)用的名稱;from django.apps import AppConfig class HelloAppConfig(AppConfig): name = 'hello_app'
-
migrations
:目錄,這里將會放這個應(yīng)用對應(yīng)遷移的數(shù)據(jù)表。在項(xiàng)目開發(fā)過程中或者完成后,我們會通過python manage.py makemigrations app_name
將該應(yīng)用的數(shù)據(jù)表結(jié)構(gòu)以及必要數(shù)據(jù)保存到這個目錄下,方便后續(xù)數(shù)據(jù)遷移; -
models.py
:這個文件是專門用來定義應(yīng)用中涉及的數(shù)據(jù)表模型(大部分時候?qū)?yīng)的數(shù)據(jù)表); -
tests.py
:很明顯,這個是用來寫測試用例的文件; -
view.py
:這里是用來編寫 URL 對應(yīng)的視圖函數(shù)的,這里一般放著應(yīng)用所有業(yè)務(wù)的邏輯處理代碼。
以上這些代碼文件是 Django 在創(chuàng)建應(yīng)用時給我們自動生成的,通常我們不會改動這些文件名,而是直接在對應(yīng)的文件中編寫相應(yīng)的代碼,這些都是 Django 自己的規(guī)范,也是為了使項(xiàng)目中代碼文件的功能清晰明了。但是,往往 Django 應(yīng)用中,我們會添加很多自己的代碼文件,最重要的有兩個:urls.py
和 serializers.py
:
-
urls.py
:將本應(yīng)用的 URL 與 視圖映射關(guān)系放到這個文件中; -
serializers.py
: 將應(yīng)用中數(shù)據(jù)庫模型字段的序列化和反序列化邏輯放到這個文件中統(tǒng)一處理。
4. 小結(jié)
本小節(jié)我們介紹了 Django 在最開始生成第一個工程的重要文件,接下來也對生成應(yīng)用的代碼文件進(jìn)行了說明,這些都是后續(xù)開發(fā) Django 項(xiàng)目的基礎(chǔ)。