1. 程式人生 > Django入門教學 >07 Django 專案組成部分剖析

07 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.pyserializers.py

  • urls.py:將本應用的 URL 與 檢視對映關係放到這個檔案中;

  • serializers.py: 將應用中資料庫模型欄位的序列化和反序列化邏輯放到這個檔案中統一處理。

4. 小結

本小節我們介紹了 Django 在最開始生成第一個工程的重要檔案,接下來也對生成應用的程式碼檔案進行了說明,這些都是後續開發 Django 專案的基礎。