title: 從零開始:Django專案的建立與配置指南
date: 2024/5/2 18:29:33
updated: 2024/5/2 18:29:33
categories:
- 後端開發
tags:
- Django
- WebDev
- Python
- ORM
- Security
- Deployment
- Optimization
Django簡介:
Django是一個開源的高階Python Web框架,由法國人Guido Zempe於2003年建立。它以“快速開發、可維護的網站”為目標,提供了許多內建的功能,如ORM(物件關係對映)、URL路由、模板系統、管理後臺等,讓開發者能夠專注於業務邏輯,而無需從頭開始構建網站的底層結構。
Django的特點包括:
- 面向開發者的易用性:提供了強大的模板系統和管理後臺。
- 高效的開發:內建ORM和模型管理系統簡化資料庫操作。
- 安全性:內建安全特性,如CSRF保護和XSS過濾。
- 可擴充套件性:模組化設計,方便新增新功能。
環境準備與安裝:
-
Python安裝: 首先確保你的計算機上安裝了Python。你可以訪問Python官網(https://www.python.org/downloads/)下載並安裝最新版本。推薦使用Python 3.x。
-
虛擬環境: 為了保持專案環境的獨立性,推薦使用虛擬環境(venv或conda)。在命令列中,進入你的專案目錄,然後執行以下命令建立虛擬環境:
python3 -m venv myenv
其中
myenv
是你的虛擬環境名稱。 -
啟用虛擬環境: 在Windows上,執行
myenv\Scripts\activate
。 在Unix或Mac上,執行source myenv/bin/activate
。 -
安裝Django: 在啟用的虛擬環境中,使用pip安裝Django:
pip install Django
安裝完成後,確認Django版本:
django-admin --version
-
設定專案: 建立一個新的Django專案,使用命令:
django-admin startproject myproject
這將建立一個名為
myproject
的資料夾,其中包含Django專案的基本結構。
現在,你已經準備好開始使用Django了。接下來可以深入學習專案的配置和應用的建立。
建立一個Django專案
建立一個Django專案非常簡單,只需要幾個命令。以下是在命令列中建立Django專案的步驟:
-
確保已啟用虛擬環境(如果使用了虛擬環境): 確保你已經透過相應命令(如Windows的
myenv\Scripts\activate
或Unix/Mac的source myenv/bin/activate
)啟用了虛擬環境。 -
開啟終端或命令提示符: 在包含專案的資料夾中開啟終端或命令提示符。
-
建立新專案: 執行以下命令建立一個新的Django專案,假設我們將其命名為
myproject
:django-admin startproject myproject
這將建立一個名為
myproject
的資料夾,其中包含Django專案的基本結構,如myproject
、myproject/settings.py
、myproject/urls.py
、myproject/wsgi.py
等。 -
進入專案目錄: 專案建立後,使用
cd
命令進入專案目錄:cd myproject
-
啟動開發伺服器: 使用以下命令啟動Django的開發伺服器,它將在本地執行:
python manage.py runserver
現在,你應該能在瀏覽器中訪問
http://127.0.0.1:8000/
,看到Django的預設歡迎頁面。
至此,你已經成功建立了一個基本的Django專案。接下來可以開始建立應用(app)並進行進一步的開發了。
Django專案結構解析
在Django中,一個專案(project)是由一個或多個應用(app)組成的。一個專案包含了整個網站的配置、URL路由、設定以及其他全域性功能,而應用則是網站的特定功能模組。讓我們來解析一下Django專案的基本結構:
-
專案資料夾: 專案資料夾是透過
django-admin startproject projectname
命令建立的,其中projectname
是專案的名稱。在專案資料夾中,你會發現以下檔案和資料夾:manage.py
:這是一個命令列工具,可以幫助你與Django專案進行互動,比如執行開發伺服器、建立資料庫遷移等。projectname/
:這是專案的包含目錄,其中包含了專案的設定和配置檔案。projectname/__init__.py
:一個空檔案,用於標識projectname
目錄為Python包。projectname/settings.py
:包含了Django專案的設定,比如資料庫配置、靜態檔案路徑、模板路徑等。projectname/urls.py
:定義了專案的頂級URL路由。projectname/wsgi.py
:用於將Django專案部署到WSGI相容的Web伺服器上的入口檔案。
-
應用資料夾: 在Django專案中,應用是可重用的Web應用程式,可以包含特定功能的模型、檢視、模板等。每個應用都有自己的資料夾,通常包含以下檔案和資料夾:
appname/
:應用的包含目錄,其中包含了應用的程式碼和資原始檔。appname/__init__.py
:標識appname
目錄為Python包。appname/admin.py
:用於註冊模型到Django的後臺管理介面。appname/apps.py
:包含應用的配置資訊。appname/models.py
:定義應用的資料模型。appname/views.py
:包含應用的檢視函式或類。appname/templates/
:存放應用的HTML模板檔案。appname/static/
:存放應用的靜態檔案,如CSS、JavaScript和影像檔案。
-
資料庫遷移資料夾: Django使用遷移(migration)來管理資料庫模式的變更,遷移資料夾通常位於應用的目錄下,包含了資料庫模式變更的Python指令碼檔案。
-
虛擬環境和依賴檔案: 在實際開發中,通常會使用虛擬環境來隔離專案的依賴。虛擬環境通常位於專案資料夾外部,而依賴檔案(如
requirements.txt
)則包含了專案所需的Python包列表。
這就是一個典型的Django專案的基本結構。透過合理的組織和管理,可以使專案更易於維護和擴充套件。
配置Django專案
配置Django專案涉及以下幾個關鍵步驟:
-
設定專案: 開啟
project_name/settings.py
檔案,配置專案的基本資訊,如資料庫設定、靜態檔案路徑、中介軟體、URL模式等。例如,設定資料庫:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', # 更改為你的資料庫型別 'NAME': 'your_database_name', # 資料庫名稱 'USER': 'your_database_user', # 資料庫使用者名稱 'PASSWORD': 'your_database_password', # 資料庫密碼 'HOST': 'localhost', # 資料庫主機,如果在其他伺服器上,填寫伺服器地址 'PORT': '5432', # 資料庫埠 } }
-
建立應用: 在
project_name
目錄下,建立新的應用:python manage.py startapp app_name
其中
app_name
是你的應用名稱。 -
配置應用: 在應用的
app_name/settings.py
中,新增應用到INSTALLED_APPS
列表中。 -
配置應用: Django會為你建立一個新的應用目錄,裡面包含了一些預設的檔案。你可以在這個目錄下編寫檢視、模型、模板等檔案來實現應用的功能。
-
註冊應用: 在專案的
settings.py
檔案中,找到INSTALLED_APPS
設定,將你新建立的應用新增到這個列表中:INSTALLED_APPS = [ ... 'your_app_name', ]
-
編寫檢視: 在你的應用目錄下的
views.py
檔案中編寫檢視函式,處理使用者請求並返回相應的響應。 -
配置URL路由: 在你的應用目錄下建立一個
urls.py
檔案,用於配置應用的URL路由。然後在專案的主urls.py
檔案中,包含你的應用URL配置:# 應用的urls.py from django.urls import path from . import views urlpatterns = [ path('your_url_path/', views.your_view_function, name='your_url_name'), ] # 專案的urls.py from django.urls import path, include urlpatterns = [ ... path('your_app/', include('your_app_name.urls')), ]
-
建立模型(可選): 如果你的應用需要與資料庫互動,可以在應用目錄下的
models.py
檔案中定義模型類,代表資料庫中的表結構。 -
執行開發伺服器: 使用
python manage.py runserver
啟動開發伺服器,然後在瀏覽器中訪問http://localhost:8000
(預設埠)檢視專案是否啟動。 -
管理後臺: 訪問
http://localhost:8000/admin/
,使用預設的管理員賬戶登入(使用者名稱:admin
,密碼:password
),可以建立和管理模型。 -
配置其他選項(如靜態檔案、郵件設定等): 根據專案需求,在
settings.py
中新增其他配置,如靜態檔案的託管、郵件伺服器設定等。
以上就是配置Django專案的基本步驟,根據你的實際需求,可能還需要進行更多的定製。
資料庫配置與遷移
在Django中,配置資料庫並進行遷移的步驟如下:
-
選擇資料庫引擎: Django支援多種資料庫引擎,例如SQLite、MySQL、PostgreSQL等。在
settings.py
檔案中的DATABASES
設定中選擇適合你的資料庫引擎,並填寫相應的連線資訊。 -
建立資料庫: 根據你選擇的資料庫引擎,在資料庫伺服器上建立一個空資料庫。如果使用SQLite,可以跳過此步驟,因為SQLite資料庫是以檔案形式儲存的。
-
配置資料庫連線資訊: 在
settings.py
檔案中的DATABASES
設定中,根據你的資料庫引擎填寫連線資訊。例如,對於MySQL資料庫:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'your_database_name', 'USER': 'your_database_user', 'PASSWORD': 'your_database_password', 'HOST': 'localhost', 'PORT': '3306', } }
-
進行資料庫遷移: 在專案根目錄下,執行以下命令來建立資料庫表和結構:
python manage.py migrate
-
建立應用的資料庫遷移檔案(可選): 如果你在應用中建立了新的模型或對現有模型進行了更改,需要為這些更改建立資料庫遷移檔案。在應用目錄下執行以下命令:
python manage.py makemigrations app_name
其中
app_name
是你的應用名稱。 -
應用資料庫遷移: 執行以下命令來應用資料庫遷移:
python manage.py migrate
-
檢視資料庫遷移狀態(可選): 執行以下命令可以檢視資料庫遷移的狀態:
python manage.py showmigrations
透過以上步驟,你就可以配置資料庫並進行遷移了。請確保資料庫連線資訊正確,並且在進行遷移之前備份資料庫以防止資料丟失。
模板與靜態檔案:
模板(Templates):
- 模板是Django中用於生成HTML內容的檔案,通常存放在應用的
templates
目錄下。 - Django使用模板語言(Template Language)來動態生成內容,包括變數、標籤和過濾器。
- 在檢視函式中使用
render()
函式載入模板並傳遞資料進行渲染,最終返回給使用者的是渲染後的HTML頁面。 - 模板語言中的變數使用
{{ variable_name }}
,標籤使用{% tag_name %}
,過濾器使用{{ value|filter_name }}
的方式進行操作。 - 繼承是模板中常用的技術,透過
{% extends 'base.html' %}
和{% block content %}
來實現模板的繼承和覆蓋。
靜態檔案(Static Files):
- 靜態檔案包括CSS、JavaScript、圖片等不需要經過處理的檔案,通常存放在應用的
static
目錄下。 - 在模板中使用
{% load static %}
載入靜態檔案,然後透過{% static 'path/to/file' %}
來引用靜態檔案。 - 在
settings.py
中配置STATIC_URL
用於指定靜態檔案的URL字首,STATICFILES_DIRS
用於指定靜態檔案的存放路徑。 - 在開發環境中,可以使用
django.contrib.staticfiles
應用來自動收集靜態檔案,而在生產環境中,可以使用Web伺服器(如Nginx)來提供靜態檔案服務。 - 為了提高效能,可以使用CDN(內容分發網路)來加速靜態檔案的訪問。
使用者認證與許可權控制:
使用者認證(User Authentication):
- Django提供了內建的使用者認證系統,包括使用者註冊、登入、登出、密碼重置等功能。
- 可以透過
django.contrib.auth
應用來實現使用者認證,其中包括User
模型和authenticate()
、login()
、logout()
等方法。 - 使用者可以透過表單輸入使用者名稱和密碼進行登入,系統會驗證使用者身份並建立相應的會話。
- 可以使用裝飾器
@login_required
來限制某些檢視只能被登入使用者訪問,未登入使用者將被重定向到登入頁面。
許可權控制(Permission Control):
- Django提供了基於角色的許可權控制系統,可以對使用者進行授權以限制其訪問許可權。
- 可以透過
django.contrib.auth.models.Permission
和django.contrib.auth.models.Group
來管理許可權和使用者組。 - 可以在檢視函式中使用
@permission_required
裝飾器來限制只有具有特定許可權的使用者才能訪問該檢視。 - 可以在模板中使用
{% if user.has_perm %}
來根據使用者是否具有某項許可權來展示不同的內容。 - 可以透過自定義許可權來擴充套件系統的許可權控制,例如定義特定操作的許可權,並將其分配給使用者或使用者組。
Django管理後臺(Django Admin):
Django管理後臺是一個內建的功能,用於管理資料庫模型(models)和應用程式的資料。它提供了一個使用者友好的介面,管理員可以執行以下操作:
- 模型管理:在後臺,可以檢視、新增、編輯和刪除模型(如User、Post等)的例項。每個模型都有自己的表單,可以直觀地管理資料。
- 資料檢視:可以檢視模型資料的列表,支援排序、過濾和搜尋功能。
- 資料編輯:點選模型例項可以進入詳細編輯頁面,可以修改欄位值並儲存更改。
- 模型建立:可以建立新的模型例項,並設定初始屬性。
- 模型欄位管理:可以管理模型的欄位,如欄位型別、預設值、驗證規則等。
- 模型關係管理:對於模型之間的關係,如一對一、一對多和多對多關係,後臺提供了視覺化工具來管理關聯例項。
- 模型表單定製:可以自定義模型的表單,包括新增或移除欄位、改變欄位順序等。
- 許可權管理:Django管理後臺的訪問許可權可以透過
django.contrib.auth
模組進行控制,可以設定不同使用者或使用者組對不同模型的訪問許可權。 - 資料匯出/匯入:支援CSV格式的資料匯出和匯入,方便資料備份或遷移。
- 後臺日誌:記錄後臺操作日誌,便於審計和問題排查。
Django管理後臺是一個非常實用的功能,使得開發人員和管理員可以輕鬆管理資料,而無需編寫大量的資料庫操作程式碼。透過它,可以快速地對應用中的資料進行操作,提高開發和維護效率。
AD: 專業的搜尋引擎
專案最佳化:
-
效能最佳化:
- 程式碼最佳化:減少不必要的資料庫查詢,使用快取,最佳化資料庫索引。
- 靜態檔案合併和壓縮:合併CSS和JavaScript檔案,壓縮它們以減少HTTP請求和傳輸大小。
- CDN(內容分發網路) :對於靜態資源,使用CDN可以提高訪問速度。
- 程式碼庫最佳化:使用效能分析工具(如cProfile、Python的
timeit
)找出瓶頸並進行最佳化。
-
程式碼重構:遵循DRY(Don't Repeat Yourself)原則,避免冗餘程式碼,提高程式碼可讀性和維護性。
-
資源管理:限制不必要的資源消耗,如記憶體和CPU。
-
響應式設計:確保網站在不同裝置和螢幕尺寸上都能有良好的使用者體驗。
安全措施:
-
身份驗證和授權:
- 使用強密碼策略,考慮使用多因素認證(MFA)。
- 對敏感操作進行許可權控制,如使用者管理、資料修改等。
-
資料保護:
- 對敏感資料進行加密,比如密碼、信用卡資訊等。
- 使用HTTPS以保護通訊內容不被竊聽。
-
輸入驗證和過濾:
- 對使用者輸入進行校驗,防止SQL隱碼攻擊、XSS攻擊等。
- 使用安全的庫和框架來處理使用者輸入。
-
錯誤處理和日誌:
- 清晰的錯誤訊息不應該包含敏感資訊。
- 記錄和監控日誌,以便及時發現並處理安全問題。
-
框架和庫的安全更新:
- 定期檢查並更新所有依賴的庫和框架,修復已知的安全漏洞。
-
防火牆和安全軟體:
- 在伺服器上安裝防火牆,阻止不必要的網路連線。
- 安裝和配置安全軟體,如WAF(Web應用防火牆)。
-
程式碼審查和滲透測試:
- 定期進行程式碼審查,尋找潛在的安全問題。
- 進行安全滲透測試,模擬駭客攻擊,找出並修復漏洞。
-
合規性:
- 遵守相關法規,如GDPR(歐洲通用資料保護條例)。
以上措施可以幫助你提升專案的效能和安全性,但請注意,安全是一個持續的過程,需要不斷更新和改進。
部署Django專案
部署Django專案通常涉及以下幾個步驟,這些步驟可能會根據你的具體需求和環境有所不同:
-
設定伺服器:
- 選擇伺服器:你可以選擇使用雲服務(如AWS、Google Cloud、Heroku等)、虛擬主機(如DigitalOcean、Vultr、Linode等)、或者自己的伺服器(如Ubuntu、CentOS等)。
- 安裝作業系統和必要的軟體:如Python、Nginx、Gunicorn或uWSGI等Web伺服器軟體。
-
安裝Django:
- 在伺服器上安裝最新版本的Python和Django,使用命令列:
pip install django
-
設定專案和應用:
- 建立一個新的Django專案:
django-admin startproject project_name
- 進入專案目錄並建立應用:
cd project_name python manage.py startapp app_name
-
配置資料庫:
- 在
project_name/settings.py
檔案中,配置資料庫連線資訊(如PostgreSQL、MySQL、SQLite等)。
- 在
-
遷移資料庫:
python manage.py makemigrations python manage.py migrate
-
建立超級使用者:
python manage.py createsuperuser
-
靜態檔案和媒體檔案管理:
- 配置靜態檔案和媒體檔案的儲存路徑,通常放在
static
和media
目錄下。 - 在生產環境中,可能需要使用如Gunicorn、uWSGI、Nginx等伺服器配置反向代理和靜態檔案處理。
- 配置靜態檔案和媒體檔案的儲存路徑,通常放在
-
部署程式碼:
- 將專案檔案(包括
manage.py
)上傳到伺服器。 - 使用版本控制系統(如Git)進行版本控制,確保程式碼更新的可追溯性。
- 安裝必要的依賴(如資料庫驅動、Django應用等)。
- 將專案檔案(包括
-
啟動伺服器:
- 使用Gunicorn、uWSGI或Nginx等工具啟動Django應用。具體命令取決於你的配置:
- Gunicorn:
gunicorn project_name.wsgi:application
- uWSGI:
uwsgi --http :8000 --module project_name.wsgi:application
- Nginx: 配置Nginx虛擬主機,並指向專案的wsgi檔案。
-
測試應用:
- 透過瀏覽器訪問
http://your_server_ip:your_port/
,確保應用正常執行。
- 透過瀏覽器訪問
-
安全性和日誌:
- 安裝SSL證書以啟用HTTPS。
- 配置日誌記錄,以便監控和除錯。
以上是一個基本的部署流程,實際部署可能需要根據你的具體需求進行調整,例如使用負載均衡、容器化(Docker)、環境變數管理等。