Django 框架



本章將詳細討論 Django 框架。

Django 是一個 MVT web 框架,用於構建 web 應用程式。龐大的 Django web 框架包含了許多“內建電池”,開發人員常常驚歎於所有元件是如何協同工作的。新增如此多“電池”的原則是將常見的 web 功能整合到框架本身,而不是以後作為單獨的庫新增。

Django 框架流行的主要原因之一是其龐大的社群。社群規模巨大,甚至為此專門建立了一個網站,來自世界各地的開發人員都在這裡開發第三方包,包括身份驗證、授權、功能齊全的 Django 支援的 CMS 系統、電子商務外掛等等。您嘗試開發的功能很可能已經被其他人開發出來,您只需要將其引入您的專案即可。

為什麼應該使用 Django?

Django 的設計鼓勵開發人員快速、簡潔地開發具有實用設計的網站。Django 實事求是的做事方法使其脫穎而出。

如果您計劃構建高度可定製的應用程式,例如社交媒體網站,Django 是最佳框架之一。Django 的優勢在於其使用者之間的互動或共享不同型別媒體的能力。Django 的一大優勢是它能夠利用龐大的社群支援,從而在您的應用程式中提供高度可定製的、可立即使用的第三方外掛。

以下是選擇 Django 進行 web 開發的十大理由:

Python

Python 憑藉其簡單的語言結構、流程結構和易於理解的語法,可以說是最容易學習的程式語言之一。它用途廣泛,可以執行網站、桌面應用程式和移動應用程式,嵌入在許多裝置中,並作為流行的指令碼語言用於其他應用程式。

內建電池

Django 附帶了一些構建常見功能(如 URL 路由、身份驗證、物件關係對映器 (ORM)、模板系統和資料庫模式遷移)的常用庫。

內建管理員

Django 具有內建的管理介面,允許您處理模型、使用者/組許可權和管理使用者。有了模型介面,除了高階資料庫功能外,無需單獨的資料庫管理程式。

不會妨礙您

建立 Django 應用程式不會新增任何樣板程式碼和不必要的函式。不需要強制匯入、第三方庫和 XML 配置檔案。

可擴充套件

Django 基於 MVC 設計模式。這意味著所有實體(如資料庫 (db)、後端和前端程式碼)都是獨立的實體。Django 允許我們將程式碼與構成站點的靜態媒體(包括圖片、檔案、CSS 和 JavaScript)分離。

Django 支援用於 web 伺服器、快取、效能管理、叢集和負載均衡的完整第三方庫列表。Django 提供的優勢之一是支援主要的電子郵件和訊息應用程式和服務,如 ReST 和 OAuth。

經受實戰檢驗

Django 於 2005 年首次開源。經過 12 年的發展,Django 不僅執行新聞釋出網站,還執行 Pinterest、Instagram、Disqus、Bitbucket、EventBrite 和 Zapier 等主要全球企業的全部或部分業務。這使其成為一個強大可靠的 web 框架。

強大的包支援

由於其龐大的社群支援和龐大的開發者網路,您想要做的任何事情很可能之前就已經有人做過了。大量的國際開發者社群透過釋出他們的專案作為開源包來為社群做出貢獻。

Django 包站點就是這些專案的其中一個儲存庫。目前,Django 包列出了 3400 多個可在我們的 Django 專案中使用的可重用 Django 應用程式、站點和工具。

積極開發

開源專案面臨的最大風險之一是其可持續性。我們無法確定它能持續多久。

Django 沒有這種風險,因為它已經有 12 年的歷史了。它持續釋出新版本,更新/更好的版本,活躍的社群每天都在壯大,並且有一個龐大的核心志願者團隊每天都在維護和改進程式碼庫。

穩定的版本

像 Django 這樣的開源軟體專案在許多情況下都積極開發,並且比競爭對手的專有軟體更安全,因為許多開發人員每天都在開發和測試它。但是,開源軟體專案的缺點是缺乏穩定的程式碼庫來進行商業化的開發。

在 Django 中,我們有軟體的長期支援 (LTS) 版本和定義的釋出流程,如下面的影像所示:

Stable Releases

一流的文件

從一開始,Django 開發人員就確保必須提供適當的綜合文件,並且教程易於理解。

誰在使用 Django?

由於 Django 的獨特優勢,有多個流行的網站是基於 Python 和 Django 框架構建的。以下是一些完全或部分基於 Django 構建的主要站點。

Disqus

它是全球最受歡迎的部落格評論託管網站之一。它很容易與大多數流行的 CMS(內容管理系統)如 WordPress 等整合。透過 Disqus 處理超過 5000 萬的使用者群,Django 能夠滿足網站所有者與社群聯絡的需求。

Disqus

洋蔥新聞 (The Onion)

洋蔥新聞網站為其諷刺新聞提供線上平臺,Django 為其提供框架。

Onion

Bitbucket

Bitbucket 類似於 GitHub,是一個版本控制儲存庫託管服務。Bitbucket 和 GitHub 之間的唯一區別在於 Bitbucket 託管 Mercurial 儲存庫,而 GitHub 託管 Git 儲存庫。由於數百萬使用者與 Bitbucket 相關聯,並且 Bitbucket 提供的所有服務(如建立儲存庫、推送程式碼、新增協作者、提交、拉取請求等)必須穩定。Django 負責執行 Bitbucket 網站。

Bitbucket

Instagram

Instagram 是一款社交網路應用程式,專為那些喜歡與所有朋友分享照片和影片的人而設計。目前 Instagram 上有很多名人,以便與他們的粉絲保持更緊密的聯絡。Django 框架也執行著 Instagram。

Instagram

Mozilla Firefox

繼 Google Chrome 之後,世界上使用第二廣泛的瀏覽器是 Mozilla 瀏覽器。現在 Mozilla 的幫助頁面是用 Django 框架構建的。

Mozilla Firefox

Pinterest

全球數百萬使用者從 Pinterest 發現新的想法和靈感。Pinterest 使用 Django 框架(根據其需求進行了修改)來執行。

Pinterest

NASA

美國國家航空航天局的官方網站是數百萬使用者訪問並檢視該主要機構提供的新聞、圖片、影片和播客的地方。Django 開發了官方 NASA 網站的某些特定部分。

Nasa

華盛頓郵報 (The Washington Post)

如果世界上有一家有影響力的報紙,那無疑是華盛頓郵報。華盛頓郵報的網站是一個非常受歡迎的線上新聞來源,與他們的日報相輔相成。Django web 框架輕鬆地處理了其龐大的訪問量和流量。

Washington Post

Reddit 禮物 (Reddit Gifts)

廣受歡迎的 Reddit 網站推出了一個名為 Reddit Gifts 的線上匿名禮物交換和聚會平臺。該網站將來自世界各地的使用者聯絡起來,並促進他們之間的禮物交換。Django web 框架為其功能提供支援。

Reddit Gifts

Prezi

Prezi 是基於 Django 框架構建的 Microsoft PowerPoint 的基於雲的替代方案。該網站提供一個虛擬畫布,可以對其進行操作並進行放大和縮小。這提供了演示的完整檢視,而不是單個幻燈片。

Prezi

安裝和建立 Django 專案和應用程式

在安裝 Django 之前,我們必須確保已安裝 Python。假設您使用的是 virtualenv,則簡單的 pip install django 就足夠了。

安裝虛擬環境和 Django

以下是Windows環境中安裝虛擬環境和Django的步驟:

Virtual Environment

要驗證 Django 是否已正確安裝,請鍵入以下程式碼:

Install Django

建立 Django 專案

安裝完成後,我們需要建立一個 Django 專案。

在您的 Windows 機器上執行以下命令將建立以下 Django 專案:

django-admin startproject my_project_name

Django Project Creating Django Project

鍵入 dir 將顯示一個新檔案和一個新目錄,如上所示。

manage.py – manage.py 是一個命令列可執行的 Python 檔案,它只是 django-admin 的一個包裝器。它幫助我們管理我們的專案,這在其名稱中也有暗示。

這樣,它就在 myFirstDjangoProject 內建立了一個名為 myFirstDjangoProject 的目錄,該目錄代表我們專案的配置根目錄。讓我們更深入地探索它。

配置 Django

將 myFirstDjangoProject 目錄稱為“配置根目錄”,是指該目錄包含通常配置 Django 專案所需的檔案。該目錄之外的所有內容都將僅專注於與專案的模型、檢視、路由等相關的“業務邏輯”。連線專案的所有點都將指向這裡。

Configuring Django
  • __init__.py – 此檔案為空,並將目錄更改為可匯入的 Python 包。

  • settings.py – 正如其名稱所示,它是設定大多數配置項的地方。

  • urls.py – URL 在 urls.py 中設定。這樣,我們不必在此檔案中顯式編寫專案的每個 URL。但是,我們必須告訴 Django URL 在何處宣告(即,我們需要在 urls.py 中連結其他 URL)。

  • wsgi.py – 這有助於在生產環境中執行應用程式,類似於 Flask、Tornado、Pyramid 等其他應用程式,它公開了一些“app”物件。

設定設定

檢視 settings.py 內部將顯示其相當大的大小——而這些只是預設值。我們需要注意的其他事項包括靜態檔案、資料庫、媒體檔案、雲集成或 Django 專案可以配置的其他幾十種方法。讓我們瞭解 settings.py 檔案中提到的一些要點:

  • BASE_DIR – 這有助於查詢檔案。在 setting.py 檔案中,BASE_DIR 引數設定基本目錄的絕對路徑。

  • SECRET_KEY – 它用於製作雜湊值。一般來說,我們使用 secret_key 用於 cookie、會話、csrf 保護和身份驗證令牌。

  • DEBUG – 我們可以將其設定為專案在開發模式或生產模式下執行。

  • ALLOWED_HOSTS – 我們透過它提供應用程式正在執行的主機名列表。在開發模式下,設定它是可選的;但是,在生產機器上,我們需要設定我們的 Django 專案。

  • INSTALLED_APPS – 它是當前安裝並在我們的 Django 專案中執行的 Django “應用程式”列表。內建 Django 提供六個已安裝的應用程式,如下所示:

    • 'django.contrib.admin'

    • 'django.contrib.auth'

    • django.contrib.

    • django.contrib.sessions

    • django.contrib.messages

    • django.contrib.staticfiles

  • MIDDLEWARE – 它幫助我們的 Django 專案執行。它是一個 Python 類,它掛接到 Django 請求/響應處理中。

  • TEMPLATES – 它定義了文件如何在前端顯示。Django 模板用於生成任何基於文字的格式。

  • WSGI_APPLICATION – 我們設定的任何伺服器都必須知道 WSGI 檔案在哪裡。如果您使用的是外部伺服器,它將在其自己的設定中查詢。預設情況下,它指向 wsgi.py 中的物件。

  • 資料庫 (DATABASES) − 它設定了 Django 專案當前訪問的資料庫。必須設定預設資料庫。如果我們設定了選擇的資料庫,我們需要提及一些與資料庫相關的資訊,例如:主機 (HOST)、使用者 (USER)、密碼 (PASSWORD)、埠 (PORT)、資料庫名稱 (database NAME) 和相應的引擎 (ENGINE)。

  • 靜態檔案 URL (STATIC_URL) − 這是引用位於 STATIC_ROOT 中的靜態檔案時使用的 URL。預設情況下為 None。

但是,我們可能需要新增靜態檔案的路徑。轉到檔案末尾,在 STATIC_URL 條目下方,新增一個名為 STATIC_ROOT 的新條目,如下所示:

myFirstDjangoProject/settings.py

STATIC_URL = '/static/'

STATIC_ROOT = os.path.join(BASE_DIR, ‘static’)

設定資料庫

有很多不同的資料庫軟體可以儲存網站資料。我們將使用預設的 sqlite3。

這已在您 myFirstDjangoProject/settings.py 檔案的以下部分設定:

DATABASES = {
   'default': {
      'ENGINE': 'django.db.backends.sqlite3',
      'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
   }
}

要為我們的部落格建立一個數據庫,讓我們在控制檯中執行以下命令:python manage.py migrate(我們需要在包含 manage.py 檔案的 myFirstDjangoProject 目錄中)。

如果一切順利,您將得到以下輸出:

Setting Up Database

啟動 Web 伺服器

您需要在包含 manage.py 檔案的目錄中。在控制檯中,我們可以透過執行 python manage.py runserver 來啟動 Web 伺服器,如下所示:

Web Server

現在,您只需要檢查您的網站是否正在執行。開啟您的瀏覽器(Firefox、Chrome、Safari、Internet Explorer 或您使用的任何瀏覽器),然後輸入以下地址:

http://127.0.0.1:8000/

https://:8000/ # 因為我們的 Web 伺服器僅在本地機器上執行。

恭喜!您剛剛建立了您的第一個網站,並使用 Web 伺服器執行它!

Starting Web Server

在 Web 伺服器執行期間,您將看不到新的命令列提示符來輸入其他命令。終端將接受下一個文字,但不會執行新命令。這是因為 Web 伺服器持續執行以監聽傳入請求。

Django 模型

我們正在嘗試建立一個 Django 模型來儲存我們部落格中的所有帖子。但為了確保它有效,我們需要了解物件。

物件

物件是屬性和動作的集合。讓我們用一個例子來理解這一點。假設我們要建模一隻貓,我們將建立一個名為 Cat 的物件,它具有顏色、年齡、情緒(好/壞/睏倦)和主人等屬性。

然後貓有一些動作:咕嚕、抓撓或餵食。

Cat 
-------- 
color 
age 
mood 
owner 
purr() 
scratch() 
feed(cat_food) 
CatFood 
-------- 
taste

所以基本上我們試圖用屬性(稱為物件屬性)和動作(稱為方法)在程式碼中描述真實的事物。

由於我們正在構建一個部落格,我們需要一些文字內容和標題。還需要作者姓名、建立日期和釋出日期。

因此,我們的部落格將具有以下物件:

Post 
-------- 
title 
text 
author 
created_date 
published_date

我們還需要一種釋出該帖子方法。既然我們已經瞭解了什麼是物件,我們就可以為我們的部落格帖子建立一個 Django 模型。

模型是 Django 中一種特殊的物件,並儲存在資料庫中。我們將資料儲存在 SQLite 資料庫中。

建立應用程式

為了使一切清晰,我們將在專案中建立一個單獨的應用程式。下面,我們將嘗試透過執行以下提到的簡單命令來建立一個部落格 Web 應用程式。

現在,我們將注意到建立了一個新的 myBlog 目錄,並且它現在包含許多檔案。專案中的目錄和檔案應如下所示:

Creating Application

建立應用程式後,我們還需要告訴 Django 使用它。我們可以在 myFirstDjangoProject/settings.py 檔案中執行此操作。

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

建立部落格帖子模型

myBlog/models.py 檔案中,我們定義了所有稱為模型的物件——這是我們將定義部落格帖子的地方。

讓我們開啟 myBlog/models.py,刪除其中的所有內容,並編寫如下程式碼:

Post Model

首先,我們透過呼叫 from 或 import 來從其他檔案中匯入一些功能。這樣,我們可以使用 from 和 import 包含某些部分,而不必在每個檔案中複製貼上相同的內容。

class Post(models.Model) − 此行定義了我們的模型(它是一個物件)。

  • class 是一個特殊的關鍵字,表示我們正在定義一個物件。

  • Post 是我們模型的名稱。始終以大寫字母開頭類名。

  • models.Model 表示 Post 是一個 Django 模型,因此 Django 知道它應該儲存在資料庫中。

現在讓我們討論上面定義的屬性:標題、文字、建立日期、釋出日期和作者。為此,我們需要定義每個欄位的型別。

  • models.CharField − 這是定義具有有限字元數的文字的方式。

  • models.TextField − 這是用於長文字,沒有限制。

  • models.DateTimeField − 這是用於日期和時間。

  • models.ForeignKey − 這是指向另一個模型的連結。

我們使用 def 定義一個函式/方法,publish 是方法的名稱。

方法通常會返回某些內容。在這裡,當我們呼叫 __str__() 時,我們將獲得包含帖子標題的文字(字串)。

在資料庫中為模型建立表

最後一步是將新模型新增到我們的資料庫。首先,我們必須讓 Django 瞭解我們已經在模型中進行了一些更改。讓我們在控制檯視窗中使用命令 python manage.py make migrations myBlog 執行相同的操作,如下所示:

Migration

然後,Django 將準備一個遷移檔案,我們現在必須將其應用於我們的資料庫。在我們的控制檯中,我們可以鍵入:python manage.py migrate myBlog,輸出應如下所示:

Creating Table

我們的 Post 模型現在在我們的資料庫中了。

Django 管理員

為了新增、編輯和刪除我們剛剛建模的帖子,我們使用 Django 管理員。

因此,讓我們開啟 myBlog/admin.py 檔案,並將以下內容放入其中:

Django Admin

首先,我們匯入(包含)上一章中定義的 Post 模型。為了使我們的模型在管理員頁面上可見,我們需要使用 admin.site.register(Post) 註冊模型。

要登入到管理員站點,您需要建立一個超級使用者——一個可以控制站點上所有內容的使用者帳戶。因此,停止 Web 伺服器並在命令列中鍵入 python manage.py createsuperuser,然後按 Enter 鍵。

Create User

好的,現在是檢視我們的 Post 模型的時候了。記住在控制檯中執行 python manage.py runserver 來執行 Web 伺服器。轉到您的瀏覽器並鍵入地址 https://127.0.0.1:8000/admin/。 使用我們剛剛選擇的憑據登入。然後您應該看到如下所示的 Django 管理員儀表板:

Run Server

轉到帖子,並進行一些實驗。您可以從任何地方新增許多部落格帖子和內容。您的部落格將如下所示:

Django Administration

這只是 Django 的概述,我們只需幾行程式碼就可以建立一個部落格。

廣告