在現今網路環境中,有效管理 IP 位址至關重要。本文將引導讀者使用 Django 框架建構一個功能完善的 IP 位址管理網頁應用程式。此應用程式將允許使用者新增、刪除、修改和查詢 IP 位址,並提供健康檢查和名稱解析等進階功能。我們將使用 Python 和 Django 框架,並以 SQLite 作為資料函式庫,最後透過 Apache 網頁伺服器進行佈署。文章將逐步說明專案的建立、資料函式庫設定、模型設計、檢視和樣板的撰寫,以及如何整合健康檢查和名稱解析功能。同時,我們也會探討 Django 框架的核心概念,例如模型-檢視-控制器(MVC)模式,以及如何在 Apache 中組態虛擬主機以佈署 Django 應用程式。
建立IP位址管理的Web應用程式
刪除功能實作
在位址清單中,每個條目旁邊都應提供刪除選項。點選刪除後,應彈出簡單的JavaScript確認對話方塊,若確認刪除,則相應的條目將從資料函式庫中移除。如果該條目是網路位址,則所有子條目也應遞迴刪除。例如,若有一個網路A包含網路B,而網路B又包含位址C,當刪除網路A時,網路B和位址C的條目也應一併移除。
修改功能實作
目前位址清單中的所有條目都應提供修改選項。點選修改後,應顯示一個與新增條目類別似的表單,所有欄位都預先填入目前的資訊。若該條目是網路位址,則只有描述欄位可修改。若該條目是主機IP位址,則在更新資料函式庫記錄之前,應進行健全性檢查(如檢查位址是否重複或是否在有效的網路範圍內)。
系統健康檢查功能
在列出所有子條目時,檢視功能應對每個非網路位址的條目呼叫系統健康檢查。健康檢查功能執行簡單的ICMP檢查(ping),若收到回應則傳回True,否則傳回False。
名稱解析功能
與健康檢查功能類別似,我們將建立另一個程式,對所有非網路位址的條目執行名稱解析。名稱解析將執行反向DNS查詢,若有DNS記錄則傳回DNS名稱,否則傳回空字串。
Django框架的基本概念
正如前面提到的,我們將使用Django網頁框架來開發這個應用程式。選擇Django是因為它是一個多功能的工具,能夠大幅簡化網頁應用程式的開發。
什麼是Django?
簡而言之,Django是一個高階的網頁開發框架。Django提供了快速開發網頁應用程式的工具。它在設計上鼓勵開發者撰寫更乾淨、更一致的程式碼,同時也允許他們撰寫更少的程式碼。開發者可以使用多種在網頁開發中常用的高階函式,因此不需要重複撰寫別人已經開發過的功能。Django還強制執行模組化,使得開發者可以撰寫一個模組,在許多不同的專案中重複使用,而無需或只需做少許修改。
Django框架的主要特點
物件關聯資料函式庫對映器
我們使用Python類別來定義我們的資料模型,Django會自動將它們轉換為資料函式庫表格和關聯。此外,Django提供了一個直接從Python存取資料函式庫的API,因此我們很少需要自己撰寫SQL程式碼。更重要的是,我們可以在不同的資料函式庫系統(如MySQL、SQLite等)之間切換,而無需修改我們的程式碼。
管理介面
當我們定義我們的資料架構時,Django不僅自動建立資料函式庫和所有需要的表格,還會產生一個完整的管理介面來管理我們的資料。
彈性的樣板系統
所有可顯示的元件或檢視都分離到樣板中,因此我們永遠不會在程式中產生HTML程式碼。相反,程式碼和HTML設計是分離的。樣板語言非常簡單易學,卻又彈性且對設計師友好,因此我們可以將設計工作交給其他人。
開源社群支援
最後但同樣重要的是,Django是開源的,並得到了活躍的開發者社群的支援。Django的發展相當迅速,每年都有幾次主要升級,並且已經存在一段時間了,證明它是一個成熟且可靠的產品。
模型/檢視/控制器模式
在深入其實作細節之前,讓我們先探討Django所根據的最重要的設計模式:模型-檢視-控制器(MVC)。任何遵循此模式的網頁應用程式都被分成三個不同的部分:資料模型、檢視和控制器。
資料模型元件
資料模型(或簡稱模型)部分定義了應用程式正在使用或操作的資料。這通常是一個資料函式庫的資料結構,但也可以是資料存取方法和函式。在Django中,所有資料結構都被定義為Python類別,框架會自動在資料函式庫上建立相應的資料架構。
檢視元件
檢視部分在大多數網頁框架中負責向終端使用者顯示資料。它是一組產生HTML程式碼的函式,這些程式碼會被送回網頁瀏覽器。Django進一步將傳統上所謂的檢視元件分成兩個不同的實體:檢視和樣板。Django中的檢視是指決定哪些資料將被顯示的程式碼,而樣板則是定義資料如何被顯示的元件。
使用Django框架建立IP位址帳務網頁應用程式
Django框架安裝與設定
為了建立一個根據Django的網頁應用程式,首先需要安裝Django框架。建議從官方網站www.djangoproject.com下載最新的Django版本。撰寫本文時,最新版本為1.6,所有範例和程式碼皆根據此版本。
安裝前的準備
假設您的系統已安裝Python 2.6或更高版本。本章的範例將使用SQLite作為資料函式庫引擎,因此需要安裝相應的套件和Python繫結。在大多數現代Linux發行版中,這些通常是預設安裝的。您可以使用以下命令檢查:
$ python
Python 2.7.5 (default, Feb 19 2014, 13:47:28)
[GCC 4.8.2 20131212 (Red Hat 4.8.2-7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> sqlite3.version
'2.6.0'
>>>
如果您的Linux發行版不是主流版本,或者在初始安裝時未安裝這些套件,請參考您的Linux發行版檔案以取得有關安裝最新Python 2.7.x版本和SQLite套件的資訊。
Django安裝
大多數主流Linux發行版都有相當新的Django版本可作為套件使用。例如,在Fedora系統上,您可以這樣安裝Django:
$ sudo yum install python-django
您也可以使用Python套件管理器(PIP)來安裝所需的套件:
$ sudo pip install django
使用PIP的優勢在於,套件通常更新得更及時。在撰寫本文時,Fedora儲存函式庫中的套件版本是1.6.4,而PyPI(Python套件索引,PIP尋找套件的地方)中的版本是1.6.5,這是最新可用的版本。主要缺點是,您最終會在系統上佈署一個不為系統套件管理器所知的應用程式。
驗證Django安裝
您可以透過從Python命令列介面匯入Django模組來測試Django安裝:
# python
Python 2.7.5 (default, Feb 19 2014, 13:47:28)
[GCC 4.8.2 20131212 (Red Hat 4.8.2-7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.get_version()
'1.6.4'
>>>
Django應用程式的結構
Django將任何網站視為一個專案。在Django術語中,專案是一組網頁應用程式和專案(或網站)特定的組態。您可以透過將相同的應用程式佈署在新的專案中來重複使用它們,並且它們將自動使用新的設定,例如資料函式庫憑證。一個專案可以包含任意數量的應用程式。“專案”這個術語可能聽起來有點令人困惑;我覺得“網站”或“網頁”更合適。
建立新專案
建立新專案很簡單。假設您已經正確安裝了Django,您只需要在想要建立新專案目錄的目錄中執行命令django-admin.py。Django的管理工具將建立一個簡單的專案骨架,包含基本的組態檔案。
我們將使用/var/app/vhosts/www_example_com/作為專案的基本目錄,該目錄將包含所有Django應用程式:
$ mkdir -p /var/app/virtual/
$ cd /var/app/virtual
$ django-admin.py startproject www_example_com
$ ls -lR www_example_com/
total 8
-rw-r--r-- 1 rytis staff 258 10 Jun 21:08 manage.py
drwxr-xr-x 6 rytis staff 204 10 Jun 21:08 www_example_com
www_example_com//www_example_com:
total 24
-rw-r--r-- 1 rytis staff 0 10 Jun 21:08 __init__.py
-rw-r--r-- 1 rytis staff 1999 10 Jun 21:08 settings.py
-rw-r--r-- 1 rytis staff 306 10 Jun 21:08 urls.py
-rw-r--r-- 1 rytis staff 405 10 Jun 21:08 wsgi.py
在專案目錄中,您將找到以下檔案:
manage.py:一個自動生成的指令碼,您將使用它來管理您的專案。建立新的資料函式庫表、驗證模式或轉儲SQL指令碼都是使用此工具完成的。此工具還允許您呼叫命令提示介面以存取資料模型。www_example_com/settings.py:一個組態檔案,包含資料函式庫資訊和應用程式特定的設定。
建立應用程式與基本組態
建立新的Django專案後,您可以開始建立應用程式並進行基本組態。具體步驟包括定義模型、建立檢視、組態URL模式等。這些內容將在後續章節中詳細介紹。
重點回顧:
- 安裝Django框架及其基本要求。
- 建立新的Django專案。
- 瞭解Django專案的基本結構和組態檔案。
下一步:
- 定義資料模型。
- 建立檢視和URL模式。
- 組態和管理資料函式庫。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title Django框架開發IP位址管理Web應用
package "Python 應用架構" {
package "應用層" {
component [主程式] as main
component [模組/套件] as modules
component [設定檔] as config
}
package "框架層" {
component [Web 框架] as web
component [ORM] as orm
component [非同步處理] as async
}
package "資料層" {
database [資料庫] as db
component [快取] as cache
component [檔案系統] as fs
}
}
main --> modules : 匯入模組
main --> config : 載入設定
modules --> web : HTTP 處理
web --> orm : 資料操作
orm --> db : 持久化
web --> cache : 快取查詢
web --> async : 背景任務
async --> fs : 檔案處理
note right of web
Flask / FastAPI / Django
end note
@enduml
此圖示展示了使用Django建立IP位址帳務網頁應用程式的基本流程。從安裝Django開始,到完成應用程式為止,每一步都至關重要。透過遵循這些步驟,您可以建立一個功能完善的網頁應用程式,用於管理IP位址帳務資訊。
建立 IP 位址記帳網頁應用程式
在前一章節中,我們成功地建立了一個新的 Django 專案,接下來,我們將探討如何建立一個用於 IP 位址記帳的網頁應用程式。
Django 專案結構解析
當我們使用 Django 的管理工具建立一個新的專案時,它會自動為我們建立以下檔案和目錄:
manage.py:用於管理專案的命令列工具。www_example_com/:專案的主要目錄,包含了專案的設定檔。__init__.py:一個空檔案,用於告訴 Python 該目錄是一個 Python 套件。settings.py:專案的設定檔,用於組態資料函式庫、應用程式等。urls.py:URL 分派器,用於定義 URL 與檢視函式之間的對應關係。wsgi.py:WSGI 設定檔,用於與 WSGI 相容的網頁伺服器(如 Apache with mod_wsgi)整合。
資料函式庫設定
在 settings.py 中,我們需要指定 Django 應該使用的資料函式庫引擎。在本例中,我們使用 SQLite。我們需要進行兩項設定:指定資料函式庫引擎和資料函式庫檔案的絕對路徑。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
內容解密:
DATABASES是 Django 用於存放資料函式庫設定的字典。'default'是預設的資料函式庫設定。'ENGINE'指定了資料函式庫引擎,在這裡我們使用 SQLite。'NAME'指定了資料函式庫檔案的絕對路徑。
建立應用程式
在完成專案和資料函式庫設定後,我們可以建立我們的應用程式。在專案目錄下執行以下命令:
$ python manage.py startapp ip_addresses
$ ls –l ip_addresses/
total 12
-rw-r--r-- 1 root root 0 2014-05-24 14:55 __init__.py
-rw-r--r-- 1 root root 57 2014-05-24 14:55 models.py
-rw-r--r-- 1 root root 514 2014-05-24 14:55 tests.py
-rw-r--r-- 1 root root 26 2014-05-24 14:55 views.py
內容解密:
startapp命令用於建立一個新的應用程式。ip_addresses是我們建立的應用程式名稱。- 建立的應用程式包含基本的檔案結構,包括模型、測試和檢視。
將應用程式加入設定檔
為了讓 Django 知道我們的應用程式,我們需要在 settings.py 中的 INSTALLED_APPS 清單中加入我們的應用程式。
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'ip_addresses',
)
內容解密:
INSTALLED_APPS是 Django 用於存放已安裝應用程式的元組。- 我們將
'ip_addresses'加入清單中,以啟用我們的應用程式。
使用 Apache 網頁伺服器佈署 Django
Django 自帶了一個輕量級的網頁伺服器,但不建議在生產環境中使用。Apache 是一個流行的選擇,我們將介紹如何使用 Apache with mod_wsgi 佈署 Django。
Apache 虛擬主機設定
<VirtualHost 192.168.0.1:80>
ServerName www.example.com
DocumentRoot /var/www/virtual/www.example.com
ErrorLog /var/log/apache2/www.example.com-error.log
CustomLog /var/log/apache2/www.example.com-access.log combined
# mod_wsgi 設定(注意:本例使用 mod_python,但建議使用 mod_wsgi)
# WSGIScriptAlias / /var/app/virtual/www_example_com/www_example_com/wsgi.py
# 以下為 mod_python 的設定(不建議使用)
SetHandler mod_python
PythonHandler django.core.handlers.modpython
PythonPath sys.path+['/var/app/virtual/']
SetEnv DJANGO_SETTINGS_MODULE www_example_com.settings
SetEnv PYTHON_EGG_CACHE /tmp
<Location "/static/">
SetHandler None
</Location>
</VirtualHost>
內容解密:
<VirtualHost>定義了一個虛擬主機。ServerName和DocumentRoot定義了伺服器的名稱和靜態檔案的根目錄。SetHandler mod_python和相關指令用於設定 mod_python 處理 Django 請求。<Location "/static/">定義了靜態檔案的處理方式,確保它們不被 mod_python 處理。