什麼是 Django?
Django 是一個軟體,可用來快速且高效地開發 Web 應用程式。大多數 Web 應用程式具有幾種常見功能,例如身份驗證、從資料庫中擷取資訊以及 cookie 管理。開發人員必須將類似的功能編碼到他們編寫的每個 Web 應用程式中。Django 將不同的功能分組到一個稱為 Web 應用程式框架的可重用模組的大集合中,使開發人員的工作更容易。開發人員使用 Django Web 框架更有效地組織和編寫程式碼,並顯著減少 Web 開發時間。
為什麼 Web 開發人員選擇 Django?
市場上有多個 Web 架構。Django 採用 Python 語言編寫,是許多 Python Web 架構中的一個。但由於以下原因,開發人員通常更喜歡 Django Web 架構而不是其他架構。
開發速度
Django 架構組織良好,易於安裝和學習,因此您在幾小時內即可開始使用。Django 設計人員建立整體架構,以使用程式碼快速實作任何 Web 架構。其支援快速開發和簡潔、務實的設計。您只需編寫幾行程式碼,因為 Django 為多個常見的 Web 開發任務提供了現成可用的結構,例如:
- 使用者身分驗證
- 內容管理
- 網站地圖
- RSS 摘要
經濟實惠
Django 是一個免費的開放原始碼 Python 專案,擁有活躍的社群來審查和維護該軟體。一個稱為 Django 軟體基金會的非營利組織致力於促進和支援 Django 的使用和維護。其定期舉辦會面、聚會和社群活動,鼓勵其他開發人員審查和參與 Django 專案。因此形成了高品質、功能豐富的 Web 架構,且可以免費使用。
備受青睞
成千上萬的開放原始碼專案和高知名度站點使用 Django,例如:
- Mozilla Firefox
- National Geographic
由於其熱門度,該架構不斷發展,並擁有強大的支援基礎設施。您在使用 Django 時若遇到任何開發挑戰,許多個人和公司會提供免費和付費支援。
Django 如何運作?
所有 Web 應用程式均由兩部分組成:伺服器程式碼和用戶端程式碼。用戶端或網站訪客擁有瀏覽器。當他們在瀏覽器中輸入 URL 時,他們會將請求傳送至執行 Web 應用程式的 Web 伺服器。伺服器透過使用資料庫來處理請求,並將資訊傳送回用戶端作為回應。用戶端程式碼會以網頁的形式向訪客顯示資訊。
Django 透過使用模型-檢視-範本 (MVT) 架構,來管理此請求和回應系統的程式碼。
型號
Django 模型充當資料庫與伺服器程式碼之間的介面。它們是有關您資料的單一明確資訊來源。這些資料模型包含您需要與資料庫互動的基本欄位和操作。因此,Django 模型將您的資料庫資料表轉換為 Python 程式碼中的類別或物件。這就是所謂的物件關係映射。
通常,每個模型會映射至單一資料庫表,並具有代表資料庫欄位的屬性。例如,如果您的網站包含員工詳細資訊,則可以呈現為:
- 包含員工姓名和地址欄位的員工資料表。
- 稱為「員工類別」的員工模型具有兩個屬性,或稱為「姓名」和「地址」的模型欄位。
檢視
Django 檢視透過使用模型來處理請求。您可以針對您的網站訪客可向您的網站發出的每種請求,來編寫檢視功能。檢視函數可以將請求作為輸入並傳回回應,這可以是錯誤程式碼、影像、檔案或任何類型的資料。
Django 具有 URL 映射程式或 URL 調派程式功能,可將您的檢視函數映射至您的 URL。您必須建立 URL 映射程式檔案,您可以在該檔案寫入如下所示 URL 模式。
urlpatterns = [
path('employee/name', views.employee_name),
path('employee/<int:year>/', views.year_archive),
]
例如,如果您希望您的網站訪客檢視特定年份中所有員工的清單,則可設定 URL 路徑員工/年份號,並編寫相應的 Django 檢視函數 year_archive。當您的網站訪客在其瀏覽器中輸入 "yourwebsitename.com/employee/2020" 時,會出現以下步驟:
- 該請求會傳送至您的 Web 應用程式。
- Django 的 Web 架構從 URL 映射程式獲取年份號和檢視函數名稱。
- 其執行 2020 年的檢視函數 year_archive。
- Year_archive 使用員工模型從資料庫中取得 2020 年的所有員工資料。
- Django 的 Web 架構將資料作為回應傳送回來。
範本
Django 範本可在瀏覽器中管理網頁版面。由於大多數網頁使用超文字標記語言 (HTML),因此,您可以使用類似於 HTML 的樣式編寫 Django 範本程式碼。範本檔案包含某些元件:
- 最終 HTML 輸出的靜態部分,例如影像、按鈕和標頭。
- 描述如何插入動態內容或資料的特殊語法,這會隨每項請求而變更。
以下元件構成 Django 範本系統。
範本語言
範本語言是您用於編寫 HTML 範本程式碼的程式設計語言。Django 支援自己的 Django 範本語言和稱為 Jinja2 的常用替代語言。
範本引擎
範本引擎會處理範本檔案,並建立最終 HTML 輸出。其包括此輸出中的回應資料。
例如,當您的網站訪客請求員工資訊時,您的 Django 範本將使用您的網站標頭、包含所有員工姓名和地址的表單,以及顯示「下一步」的按鈕,來填充其看到的網頁。
您可以在 Django 中使用哪些其他模組?
雖然模型-檢視-範本 (MVT) 架構定義了任何應用程式的基本結構,但 Django 還有其他多個模組來增強您的網站。以下是我們給出的一些範例。
表單
大多數網站都需要表單,用於註冊和付款等任務,或從網站訪客收集資訊。Django 提供許多工具和程式庫,您可以將其用於管理您的網站表單。它可以簡化和自動化表單處理,並且比您自己編寫程式碼更安全。
Django 使用三種方式來進行表單處理:
- 透過準備和重組顯示資料來進行表單建立
- 透過在用戶端檢查 HTML 表單來進行表單驗證
- 透過接收提交的資料來進行表單處理
使用者身份驗證
現代網站必須對使用者進行身分驗證和授權。身分驗證可驗證使用者的身分,並授權決定經過身分驗證的使用者可在網站上執行的操作。Django 可管理各種用途的身分驗證。
- 使用者帳戶
- 允許使用者執行特定網站任務的許可以及是或否旗標
- 具有類似許可的多個使用者帳戶群組
- 以 Cookie 為基礎的使用者工作階段
此外還提供可設定的密碼雜湊系統和工具,以限制表單和檢視中的內容。
網站管理
Django 管理網站可讓您直接為您的網站提供管理頁面。網站管理員可使用頁面,在您的網站上建立、編輯或檢視資料模型。
Django 自以為是嗎?
當 Web 架構強制執行 Web 開發人員的進程時,我們非正式地稱其為「自以為是」。他們有意見或正確的方式,開發人員必須完成某些任務。例如,自以為是的架構通常會保留該產業相關應用程式任務的詳細文件,藉此支援特定產業的高效開發。
另一方面,自以為是的架構對如何將不同的模型-檢視-範本 (MVT) 元件整合在一起具有較少的限制。雖然這些架構更靈活,但會導致程式碼組織的複雜性,因為不同的開發人員可使用不同的方法來執行相同的任務。
Django 有點自以為是。它提供廣泛的元件,並包含有關如何處理許多不同類型 Web 開發任務的文件。開發人員可以使用 Django 的解耦架構,從一系列選項中進行選擇,甚至可以新增對其所需新選項的支援。
什麼是 Django 安全性?
網路罪犯通常以 Web 應用程式為目標,以存取使用者登入、財務資料和其他敏感資訊。Django Web 架構提供多種功能,來保護您的 Web 應用程式和使用者。您可以遵循 Django 最佳實務,藉此避免許多常見的安全錯誤。以下是我們給出的一些範例。
跨網站指令碼保護
當網路罪犯將惡意程式碼插入網站使用者的瀏覽器時,就會發生跨網站指令碼 (XSS) 攻擊。他們可透過多種方式欺騙您的 Web 應用程式,來攻擊您的使用者,例如:
- 將惡意指令碼存放在資料庫中,以便伺服器在下一次回應中不慎傳送惡意程式碼。
- 這會誘騙使用者按一下可導致惡意用戶端程式碼 (而非程式碼) 的連結,進而在使用者瀏覽器中執行。
例如,Django 範本可能具有 {{name}},這會顯示使用者在其設定檔名稱欄位中輸入的文字。網路罪犯劫持工作階段,並將名稱變更為程式碼,如 <script>alert('hello')</script>。範本變更為 {{<script>alert('hello')</script>}}。
此程式碼目前在使用者的瀏覽器中執行,以便文字訊息 "Hello" 在其螢幕上快顯。雖然此範例很簡單,但您可以看到網路罪犯如何插入複雜的指令碼,來控制使用者的電腦。
Django 透過自動逸出或忽略使用者輸入中指示惡意程式碼的特定字元 (如 < 和 >),來保護您免受此類攻擊。
未經授權的存取保護
當駭客竊取使用者的憑證,並向您的 Web 應用程式傳送未經授權的請求時,則會發生跨網站請求偽造 (CSRF) 攻擊。Django 具有內建保護,可防範 Django CSRF 模組中大多數類型的攻擊。運作方式︰在第一次登入時向每一位使用者傳送一個機密值。
新的用戶端請求包含機密值,以作為客戶所聲稱身分的證明。由於只有授權使用者的瀏覽器知道機密值,因此,如果 Django 來自其他假冒使用者的機器,則 Django 可自動拒絕請求。您必須啟用 Django CSRF 模組設定,才能正常運作。
SQL 隱碼攻擊保護
網路罪犯使用 SQL 隱碼攻擊,透過使用 POST 等 HTTP 請求將 SQL 程式碼插入資料庫中。惡意程式碼可能會竊取或刪除您的真實資料。Django 在設計本身解決了這個問題。使用者傳送的資料 (稱為參數) 會與資料庫查詢分隔,直至到達模型層。Django 模型隨後可在建立查詢程式碼時,逸出危險的字元。
由於社群支援而提供的保護
Django 中的保護超出其內建的安全功能。由於 Django 是開放原始碼,因此,許多經驗豐富的開發人員會使用和審查 Django 模組。完整的測試可提高 Django 程式碼的可靠性,並防止遺留意外的安全漏洞。
什麼是 Django 的可擴展性?
在網站開發中,可擴展性是指網站同時處理多個用戶端請求的能力。Django 專案可擴展性非常高,可處理成千上萬的請求。您可以透過以下方式來擴展 Django 應用程式。
硬體
Django 團隊設計了 Web 架構,以高效使用系統中的硬體。使用無共用的架構,Django 會將資料庫層 (模型) 和應用程式層 (檢視) 等元件分隔。您可以在任何層級新增硬體,而不會影響系統的其餘部分。您可以在系統中新增更多資料庫伺服器或應用程式伺服器,Django 則會高效地利用這些資源來處理多個訪客。
快取
快取是在用戶端伺服器或中間伺服器上儲存某些網頁資料的程序,以便您的 Django 應用程式可以更快地處理請求,從而增加規模。Django 提供一個強大的快取系統,其具有不同層級的快取:
- 您可以快取整個網站。
- 您可以快取特定的檢視函數輸出。
- 您可以快取建立耗時的特定內容。
Django 專案還可以很好地與第三方快取配合使用。您可以撰寫程式碼,提供有關這些快取的提示,並告知其您要快取應用程式的哪個部分。
AWS 如何協助您支援 Django 網路應用程式?
AWS Elastic Beanstalk 是一項使用者友好的服務,可用於部署和擴展 Web 應用程式和服務,能夠採用 Django、Python、Java、.NET、PHP、Node.js、Ruby、Go 和 Docker 等技術,在 Apache、Nginx、Passenger 和 IIS 上進行開發。
Elastic Beanstalk 透過以下方式支援 Django 開發人員:
- 上傳您的 Django 程式碼和 Elastic Beanstalk 自動處理部署。
- Elastic Beanstalk 負責佈建和操作基礎設施,並協助管理應用程式堆疊 (平台),因此您無須花費時間,也不用發展專業技能。
- Elastic Beanstalk 會根據應用程式的特定需求,透過使用可輕鬆調整的 Auto Scaling 設定,自動對其進行擴展和縮減。
立即建立免費的 AWS 帳戶,開始將 Django 應用程式部署至 Elastic Beanstalk。