從零開始:Django專案的建立與配置指南

Amd794發表於2024-05-02

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

image

Django簡介:

Django是一個開源的高階Python Web框架,由法國人Guido Zempe於2003年建立。它以“快速開發、可維護的網站”為目標,提供了許多內建的功能,如ORM(物件關係對映)、URL路由、模板系統、管理後臺等,讓開發者能夠專注於業務邏輯,而無需從頭開始構建網站的底層結構。

Django的特點包括:

  1. 面向開發者的易用性:提供了強大的模板系統和管理後臺。
  2. 高效的開發:內建ORM和模型管理系統簡化資料庫操作。
  3. 安全性:內建安全特性,如CSRF保護和XSS過濾。
  4. 可擴充套件性:模組化設計,方便新增新功能。

環境準備與安裝:

  1. Python安裝: 首先確保你的計算機上安裝了Python。你可以訪問Python官網(https://www.python.org/downloads/)下載並安裝最新版本。推薦使用Python 3.x。

  2. 虛擬環境: 為了保持專案環境的獨立性,推薦使用虛擬環境(venv或conda)。在命令列中,進入你的專案目錄,然後執行以下命令建立虛擬環境:

    python3 -m venv myenv
    

    其中myenv是你的虛擬環境名稱。

  3. 啟用虛擬環境: 在Windows上,執行myenv\Scripts\activate。 在Unix或Mac上,執行source myenv/bin/activate

  4. 安裝Django: 在啟用的虛擬環境中,使用pip安裝Django:

    pip install Django
    

    安裝完成後,確認Django版本:

    django-admin --version
    
  5. 設定專案: 建立一個新的Django專案,使用命令:

    django-admin startproject myproject
    

    這將建立一個名為myproject的資料夾,其中包含Django專案的基本結構。

現在,你已經準備好開始使用Django了。接下來可以深入學習專案的配置和應用的建立。

建立一個Django專案

建立一個Django專案非常簡單,只需要幾個命令。以下是在命令列中建立Django專案的步驟:

  1. 確保已啟用虛擬環境(如果使用了虛擬環境): 確保你已經透過相應命令(如Windows的myenv\Scripts\activate或Unix/Mac的source myenv/bin/activate)啟用了虛擬環境。

  2. 開啟終端或命令提示符: 在包含專案的資料夾中開啟終端或命令提示符。

  3. 建立新專案: 執行以下命令建立一個新的Django專案,假設我們將其命名為myproject

    django-admin startproject myproject
    

    這將建立一個名為myproject的資料夾,其中包含Django專案的基本結構,如myprojectmyproject/settings.pymyproject/urls.pymyproject/wsgi.py等。

  4. 進入專案目錄: 專案建立後,使用cd命令進入專案目錄:

    cd myproject
    
  5. 啟動開發伺服器: 使用以下命令啟動Django的開發伺服器,它將在本地執行:

    python manage.py runserver
    

    現在,你應該能在瀏覽器中訪問http://127.0.0.1:8000/,看到Django的預設歡迎頁面。

至此,你已經成功建立了一個基本的Django專案。接下來可以開始建立應用(app)並進行進一步的開發了。

Django專案結構解析

在Django中,一個專案(project)是由一個或多個應用(app)組成的。一個專案包含了整個網站的配置、URL路由、設定以及其他全域性功能,而應用則是網站的特定功能模組。讓我們來解析一下Django專案的基本結構:

  1. 專案資料夾: 專案資料夾是透過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伺服器上的入口檔案。
  2. 應用資料夾: 在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和影像檔案。
  3. 資料庫遷移資料夾: Django使用遷移(migration)來管理資料庫模式的變更,遷移資料夾通常位於應用的目錄下,包含了資料庫模式變更的Python指令碼檔案。

  4. 虛擬環境和依賴檔案: 在實際開發中,通常會使用虛擬環境來隔離專案的依賴。虛擬環境通常位於專案資料夾外部,而依賴檔案(如requirements.txt)則包含了專案所需的Python包列表。

這就是一個典型的Django專案的基本結構。透過合理的組織和管理,可以使專案更易於維護和擴充套件。

配置Django專案

配置Django專案涉及以下幾個關鍵步驟:

  1. 設定專案: 開啟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',  # 資料庫埠
        }
    }
    
  2. 建立應用:project_name目錄下,建立新的應用:

    python manage.py startapp app_name
    

    其中app_name是你的應用名稱。

  3. 配置應用: 在應用的app_name/settings.py中,新增應用到INSTALLED_APPS列表中。

  4. 配置應用: Django會為你建立一個新的應用目錄,裡面包含了一些預設的檔案。你可以在這個目錄下編寫檢視、模型、模板等檔案來實現應用的功能。

  5. 註冊應用: 在專案的settings.py檔案中,找到INSTALLED_APPS設定,將你新建立的應用新增到這個列表中:

    INSTALLED_APPS = [
        ...
        'your_app_name',
    ]
    
  6. 編寫檢視: 在你的應用目錄下的views.py檔案中編寫檢視函式,處理使用者請求並返回相應的響應。

  7. 配置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')),
    ]
    
  8. 建立模型(可選): 如果你的應用需要與資料庫互動,可以在應用目錄下的models.py檔案中定義模型類,代表資料庫中的表結構。

  9. 執行開發伺服器: 使用python manage.py runserver啟動開發伺服器,然後在瀏覽器中訪問http://localhost:8000(預設埠)檢視專案是否啟動。

  10. 管理後臺: 訪問http://localhost:8000/admin/,使用預設的管理員賬戶登入(使用者名稱:admin,密碼:password),可以建立和管理模型。

  11. 配置其他選項(如靜態檔案、郵件設定等): 根據專案需求,在settings.py中新增其他配置,如靜態檔案的託管、郵件伺服器設定等。

以上就是配置Django專案的基本步驟,根據你的實際需求,可能還需要進行更多的定製。

資料庫配置與遷移

在Django中,配置資料庫並進行遷移的步驟如下:

  1. 選擇資料庫引擎: Django支援多種資料庫引擎,例如SQLite、MySQL、PostgreSQL等。在settings.py檔案中的DATABASES設定中選擇適合你的資料庫引擎,並填寫相應的連線資訊。

  2. 建立資料庫: 根據你選擇的資料庫引擎,在資料庫伺服器上建立一個空資料庫。如果使用SQLite,可以跳過此步驟,因為SQLite資料庫是以檔案形式儲存的。

  3. 配置資料庫連線資訊: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',
        }
    }
    
  4. 進行資料庫遷移: 在專案根目錄下,執行以下命令來建立資料庫表和結構:

    python manage.py migrate
    
  5. 建立應用的資料庫遷移檔案(可選): 如果你在應用中建立了新的模型或對現有模型進行了更改,需要為這些更改建立資料庫遷移檔案。在應用目錄下執行以下命令:

    python manage.py makemigrations app_name
    

    其中app_name是你的應用名稱。

  6. 應用資料庫遷移: 執行以下命令來應用資料庫遷移:

    python manage.py migrate
    
  7. 檢視資料庫遷移狀態(可選): 執行以下命令可以檢視資料庫遷移的狀態:

    python manage.py showmigrations
    

透過以上步驟,你就可以配置資料庫並進行遷移了。請確保資料庫連線資訊正確,並且在進行遷移之前備份資料庫以防止資料丟失。

模板與靜態檔案:

模板(Templates):

  1. 模板是Django中用於生成HTML內容的檔案,通常存放在應用的templates目錄下。
  2. Django使用模板語言(Template Language)來動態生成內容,包括變數、標籤和過濾器。
  3. 在檢視函式中使用render()函式載入模板並傳遞資料進行渲染,最終返回給使用者的是渲染後的HTML頁面。
  4. 模板語言中的變數使用{{ variable_name }},標籤使用{% tag_name %},過濾器使用{{ value|filter_name }}的方式進行操作。
  5. 繼承是模板中常用的技術,透過{% extends 'base.html' %}{% block content %}來實現模板的繼承和覆蓋。

靜態檔案(Static Files):

  1. 靜態檔案包括CSS、JavaScript、圖片等不需要經過處理的檔案,通常存放在應用的static目錄下。
  2. 在模板中使用{% load static %}載入靜態檔案,然後透過{% static 'path/to/file' %}來引用靜態檔案。
  3. settings.py中配置STATIC_URL用於指定靜態檔案的URL字首,STATICFILES_DIRS用於指定靜態檔案的存放路徑。
  4. 在開發環境中,可以使用django.contrib.staticfiles應用來自動收集靜態檔案,而在生產環境中,可以使用Web伺服器(如Nginx)來提供靜態檔案服務。
  5. 為了提高效能,可以使用CDN(內容分發網路)來加速靜態檔案的訪問。

使用者認證與許可權控制:

使用者認證(User Authentication):

  1. Django提供了內建的使用者認證系統,包括使用者註冊、登入、登出、密碼重置等功能。
  2. 可以透過django.contrib.auth應用來實現使用者認證,其中包括User模型和authenticate()login()logout()等方法。
  3. 使用者可以透過表單輸入使用者名稱和密碼進行登入,系統會驗證使用者身份並建立相應的會話。
  4. 可以使用裝飾器@login_required來限制某些檢視只能被登入使用者訪問,未登入使用者將被重定向到登入頁面。

許可權控制(Permission Control):

  1. Django提供了基於角色的許可權控制系統,可以對使用者進行授權以限制其訪問許可權。
  2. 可以透過django.contrib.auth.models.Permissiondjango.contrib.auth.models.Group來管理許可權和使用者組。
  3. 可以在檢視函式中使用@permission_required裝飾器來限制只有具有特定許可權的使用者才能訪問該檢視。
  4. 可以在模板中使用{% if user.has_perm %}來根據使用者是否具有某項許可權來展示不同的內容。
  5. 可以透過自定義許可權來擴充套件系統的許可權控制,例如定義特定操作的許可權,並將其分配給使用者或使用者組。

Django管理後臺(Django Admin):

Django管理後臺是一個內建的功能,用於管理資料庫模型(models)和應用程式的資料。它提供了一個使用者友好的介面,管理員可以執行以下操作:

  1. 模型管理:在後臺,可以檢視、新增、編輯和刪除模型(如User、Post等)的例項。每個模型都有自己的表單,可以直觀地管理資料。
  2. 資料檢視:可以檢視模型資料的列表,支援排序、過濾和搜尋功能。
  3. 資料編輯:點選模型例項可以進入詳細編輯頁面,可以修改欄位值並儲存更改。
  4. 模型建立:可以建立新的模型例項,並設定初始屬性。
  5. 模型欄位管理:可以管理模型的欄位,如欄位型別、預設值、驗證規則等。
  6. 模型關係管理:對於模型之間的關係,如一對一、一對多和多對多關係,後臺提供了視覺化工具來管理關聯例項。
  7. 模型表單定製:可以自定義模型的表單,包括新增或移除欄位、改變欄位順序等。
  8. 許可權管理:Django管理後臺的訪問許可權可以透過django.contrib.auth模組進行控制,可以設定不同使用者或使用者組對不同模型的訪問許可權。
  9. 資料匯出/匯入:支援CSV格式的資料匯出和匯入,方便資料備份或遷移。
  10. 後臺日誌:記錄後臺操作日誌,便於審計和問題排查。

Django管理後臺是一個非常實用的功能,使得開發人員和管理員可以輕鬆管理資料,而無需編寫大量的資料庫操作程式碼。透過它,可以快速地對應用中的資料進行操作,提高開發和維護效率。

AD: 專業的搜尋引擎

專案最佳化

  1. 效能最佳化

    • 程式碼最佳化:減少不必要的資料庫查詢,使用快取,最佳化資料庫索引。
    • 靜態檔案合併和壓縮:合併CSS和JavaScript檔案,壓縮它們以減少HTTP請求和傳輸大小。
    • CDN(內容分發網路) :對於靜態資源,使用CDN可以提高訪問速度。
    • 程式碼庫最佳化:使用效能分析工具(如cProfile、Python的timeit)找出瓶頸並進行最佳化。
  2. 程式碼重構:遵循DRY(Don't Repeat Yourself)原則,避免冗餘程式碼,提高程式碼可讀性和維護性。

  3. 資源管理:限制不必要的資源消耗,如記憶體和CPU。

  4. 響應式設計:確保網站在不同裝置和螢幕尺寸上都能有良好的使用者體驗。

安全措施

  1. 身份驗證和授權

    • 使用強密碼策略,考慮使用多因素認證(MFA)。
    • 對敏感操作進行許可權控制,如使用者管理、資料修改等。
  2. 資料保護

    • 對敏感資料進行加密,比如密碼、信用卡資訊等。
    • 使用HTTPS以保護通訊內容不被竊聽。
  3. 輸入驗證和過濾

    • 對使用者輸入進行校驗,防止SQL隱碼攻擊、XSS攻擊等。
    • 使用安全的庫和框架來處理使用者輸入。
  4. 錯誤處理和日誌

    • 清晰的錯誤訊息不應該包含敏感資訊。
    • 記錄和監控日誌,以便及時發現並處理安全問題。
  5. 框架和庫的安全更新

    • 定期檢查並更新所有依賴的庫和框架,修復已知的安全漏洞。
  6. 防火牆和安全軟體

    • 在伺服器上安裝防火牆,阻止不必要的網路連線。
    • 安裝和配置安全軟體,如WAF(Web應用防火牆)。
  7. 程式碼審查和滲透測試

    • 定期進行程式碼審查,尋找潛在的安全問題。
    • 進行安全滲透測試,模擬駭客攻擊,找出並修復漏洞。
  8. 合規性

    • 遵守相關法規,如GDPR(歐洲通用資料保護條例)。

以上措施可以幫助你提升專案的效能和安全性,但請注意,安全是一個持續的過程,需要不斷更新和改進。

部署Django專案

部署Django專案通常涉及以下幾個步驟,這些步驟可能會根據你的具體需求和環境有所不同:

  1. 設定伺服器

    • 選擇伺服器:你可以選擇使用雲服務(如AWS、Google Cloud、Heroku等)、虛擬主機(如DigitalOcean、Vultr、Linode等)、或者自己的伺服器(如Ubuntu、CentOS等)。
    • 安裝作業系統和必要的軟體:如Python、Nginx、Gunicorn或uWSGI等Web伺服器軟體。
  2. 安裝Django

    • 在伺服器上安裝最新版本的Python和Django,使用命令列:
    pip install django
    
  3. 設定專案和應用

    • 建立一個新的Django專案:
    django-admin startproject project_name
    
    • 進入專案目錄並建立應用:
    cd project_name
    python manage.py startapp app_name
    
  4. 配置資料庫

    • project_name/settings.py檔案中,配置資料庫連線資訊(如PostgreSQL、MySQL、SQLite等)。
  5. 遷移資料庫

    python manage.py makemigrations
    python manage.py migrate
    
  6. 建立超級使用者

    python manage.py createsuperuser
    
  7. 靜態檔案和媒體檔案管理

    • 配置靜態檔案和媒體檔案的儲存路徑,通常放在staticmedia目錄下。
    • 在生產環境中,可能需要使用如Gunicorn、uWSGI、Nginx等伺服器配置反向代理和靜態檔案處理。
  8. 部署程式碼

    • 將專案檔案(包括manage.py)上傳到伺服器。
    • 使用版本控制系統(如Git)進行版本控制,確保程式碼更新的可追溯性。
    • 安裝必要的依賴(如資料庫驅動、Django應用等)。
  9. 啟動伺服器

    • 使用Gunicorn、uWSGI或Nginx等工具啟動Django應用。具體命令取決於你的配置:
    • Gunicorn: gunicorn project_name.wsgi:application
    • uWSGI: uwsgi --http :8000 --module project_name.wsgi:application
    • Nginx: 配置Nginx虛擬主機,並指向專案的wsgi檔案。
  10. 測試應用

    • 透過瀏覽器訪問http://your_server_ip:your_port/,確保應用正常執行。
  11. 安全性和日誌

    • 安裝SSL證書以啟用HTTPS。
    • 配置日誌記錄,以便監控和除錯。

以上是一個基本的部署流程,實際部署可能需要根據你的具體需求進行調整,例如使用負載均衡、容器化(Docker)、環境變數管理等。

相關文章