返回文章列表

Django框架開發IP位址管理Web應用

本文介紹如何使用 Django 框架建構 IP 位址管理網頁應用程式,涵蓋刪除、修改、健康檢查、名稱解析等功能的實作,並詳細說明 Django 框架的安裝設定、專案結構、資料函式庫設定、應用程式建立以及使用 Apache 佈署等關鍵步驟,提供程式碼範例和組態說明,引導讀者逐步開發功能完善的 IP 位址管理系統

Web 開發 系統設計

在現今網路環境中,有效管理 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'),
    }
}

內容解密:

  1. DATABASES 是 Django 用於存放資料函式庫設定的字典。
  2. 'default' 是預設的資料函式庫設定。
  3. 'ENGINE' 指定了資料函式庫引擎,在這裡我們使用 SQLite。
  4. '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

內容解密:

  1. startapp 命令用於建立一個新的應用程式。
  2. ip_addresses 是我們建立的應用程式名稱。
  3. 建立的應用程式包含基本的檔案結構,包括模型、測試和檢視。

將應用程式加入設定檔

為了讓 Django 知道我們的應用程式,我們需要在 settings.py 中的 INSTALLED_APPS 清單中加入我們的應用程式。

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'ip_addresses',
)

內容解密:

  1. INSTALLED_APPS 是 Django 用於存放已安裝應用程式的元組。
  2. 我們將 '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>

內容解密:

  1. <VirtualHost> 定義了一個虛擬主機。
  2. ServerNameDocumentRoot 定義了伺服器的名稱和靜態檔案的根目錄。
  3. SetHandler mod_python 和相關指令用於設定 mod_python 處理 Django 請求。
  4. <Location "/static/"> 定義了靜態檔案的處理方式,確保它們不被 mod_python 處理。