一.簡介
- Django 是一個用于構建 Web 應用程序的高級 Python Web 框架。
- Django 提供了一套強大的工具和約定,使得開發者能夠快速構建功能齊全且易于維護的網站。
- Django 遵守 BSD 版權,初次發布于 2005 年 7 月, 并于 2008 年 9 月發布了第一個正式版本 1.0 。
- Django 采用了 MVT 的軟件設計模式,即模型(Model),視圖(View)和模板(Template)。
二.Django與Python版本對應關系
Django 與 Python 版本兼容表
Django 版本 | Python 版本要求 | 備注 |
---|---|---|
Django 5.0 | Python 3.10, 3.11, 3.12 | 最新穩定版(2024年發布) |
Django 4.2 LTS | Python 3.8, 3.9, 3.10, 3.11 | 長期支持版(支持到 2026年4月) |
Django 4.1 | Python 3.8, 3.9, 3.10 | 已結束維護(EOL) |
Django 4.0 | Python 3.8, 3.9, 3.10 | 已結束維護(EOL) |
Django 3.2 LTS | Python 3.6, 3.7, 3.8, 3.9, 3.10 | 長期支持版(支持到 2024年4月) |
Django 3.1 | Python 3.6, 3.7, 3.8, 3.9 | 已結束維護(EOL) |
Django 3.0 | Python 3.6, 3.7, 3.8 | 已結束維護(EOL) |
Django 2.2 LTS | Python 3.5, 3.6, 3.7, 3.8 | 已結束維護(2022年4月) |
關鍵說明
-
LTS 版本(長期支持版):
-
推薦生產環境使用,提供?3年?安全更新(如 Django 4.2、3.2)。
-
非 LTS 版本僅維護到下一個版本發布(通常 8個月)。
-
-
Python 版本建議:
-
新項目建議使用?Python 3.10+?+?Django 4.2/5.0。
-
舊項目維護可參考 LTS 版本(如 Django 3.2 + Python 3.8)。
-
-
數據庫兼容性:
-
Django 5.0 移除了對 PostgreSQL 11、MySQL 5.7 等舊數據庫的支持。
-
如何選擇?
-
學習/新項目?→ Django 5.0 + Python 3.12
-
企業生產環境?→ Django 4.2 LTS + Python 3.10/3.11
-
兼容舊系統?→ Django 3.2 LTS + Python 3.8
三.安裝
安裝前最好檢查版本兼容性,對照上面的表格,選擇與本地python版本匹配的Django版本
查看已安裝的 Python 版本:
python --version
# 或
python3 --version
?
安裝指定版本的 Django,若未指定,則安裝最新版本
pip install django==4.2.6 # 例如安裝 Django 4.2 LTS
?未指定版本安裝
?驗證安裝
python -m django --version
?出現下圖的提示則表明安裝成功
?四.使用
安裝 Django 之后,就有了可用的管理工具?django-admin,Windows 如果沒有配置環境變量可以用?django-admin創建項目
django-admin startproject hello_django
創建完成后的項目結構
目錄說明:
- hello_django:?項目的容器。
- manage.py:?一個實用的命令行工具,可讓你以各種方式與該 Django 項目進行交互。
- hello_django/__init__.py:?一個空文件,告訴 Python 該目錄是一個 Python 包。
- hello_django/asgi.py:?一個 ASGI 兼容的 Web 服務器的入口,以便運行你的項目。
- hello_django/settings.py:?該 Django 項目的設置/配置。
- hello_django/urls.py:?該 Django 項目的 URL 聲明; 一份由 Django 驅動的網站"目錄"。
- hello_django/wsgi.py:?一個 WSGI 兼容的 Web 服務器的入口,以便運行你的項目。
接下來我們進入 hello_django目錄輸入以下命令,啟動服務器:
python manage.py runserver 0.0.0.0:8000
?
0.0.0.0 讓其它電腦可連接到開發服務器,8000 為端口號。如果不說明,那么端口號默認為 8000。
在瀏覽器輸入服務器的 ip(這里我們輸入本機 IP 地址:?127.0.0.1:8000) 及端口號,如果正常啟動,就會出現Django的歡迎頁面。
視圖和 URL 配置
在上面創建的 hello_django 目錄下的 hello_django目錄新建一個 views.py 文件,
并輸入下面的代碼:
from django.http import HttpResponsedef hello(request):return HttpResponse("Hello Django! ")
?接著,綁定 URL 與視圖函數。打開 urls.py 文件,刪除原來代碼,將以下代碼復制粘貼到 urls.py 文件中:
from django.urls import pathfrom . import viewsurlpatterns = [path("", views.hello),
]
?刷新瀏覽器
我們還可以修改以下path中路徑:
from django.urls import pathfrom . import viewsurlpatterns = [path("hello/", views.hello),
]
注意:項目中如果代碼有改動,服務器會自動監測代碼的改動并自動重新載入,所以如果你已經啟動了服務器則不需手動重啟。
path() 函數
Django path() 可以接收四個參數,分別是兩個必選參數:route、view 和兩個可選參數:kwargs、name。
語法格式:
path(route, view, kwargs=None, name=None)
-
route:?字符串,定義 URL 的路徑部分。可以包含變量,例如?
<int:my_variable>
,以從 URL 中捕獲參數并將其傳遞給視圖函數。 -
view:?視圖函數,處理與給定路由匹配的請求。可以是一個函數或一個基于類的視圖。
-
kwargs(可選):?一個字典,包含傳遞給視圖函數的額外關鍵字參數。
-
name(可選):?為 URL 路由指定一個唯一的名稱,以便在代碼的其他地方引用它。這對于在模板中生成 URL 或在代碼中進行重定向等操作非常有用。
Django 模板
在 hello_django目錄底下創建 templates 目錄并建立 demo.html文件, templates 目錄要與manage.py文件平級
demo.html寫入下面的代碼:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>{{ hello }}</h1><p>Welcome to my website!</p>
</body>
</html>
在<h1>標簽中使用了雙括號表示變量
接下來我們需要向Django說明模板文件的路徑,修改hello_djang/settings.py,修改 TEMPLATES 中的 DIRS 為?[os.path.join(BASE_DIR, 'templates')],如下所示:
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]
?然后修改 views.py,增加一個新的對象,用于向模板提交數據:
from django.http import HttpResponse
from django.shortcuts import renderdef hello(request):return HttpResponse("Hello Django ! ")def template(request):context = {}context["hello"] = "Hello Django"return render(request, "demo.html", context)
這里使用 render 來替代之前使用的 HttpResponse。render 還使用了一個字典 context 作為參數。
context 字典中元素的鍵值?hello?對應了模板中的變量?{{ hello }}。這樣我們就完成了使用模板來輸出數據,從而實現數據與視圖分離。然后訪問demo路徑
模板中變量,列表和字典的使用
項目結構:
在views.py文件中添加下面的代碼
# 模板中變量的使用
def template_var(request):var_name = "我是一個變量"return render(request, "var.html", {"name": var_name})# 模板中列表的使用
def template_list(request):views_list = ["django1","django2","django3"]return render(request, "list.html", {"views_list": views_list})# 模板中字典的使用
def views_dict(request):views_dict = {"name":"Tom", "age":12}return render(request, "dict.html", {"views_dict": views_dict})
在urls.py中添加下面的代碼:
# 變量路徑的定義
# urlpatterns = [
# path("var/", views.template_var, name="template_var"),
# ]# 列表路徑的定義# urlpatterns = [
# path("list/", views.template_list, name="template_list"),
# ]# 字典路徑的定義urlpatterns = [path("dict/", views.views_dict, name="views_dict"),
]
?html中代碼,通過點操作符獲取列表和字典中的元素:
# 變量
<h1>{{ name }}</h1># 列表
<p>{{ views_list }}</p>
<p>{{ views_list.0 }}</p># 字典
<p>{{ views_dict }}</p>
<p>{{ views_dict.name }}</p>
<p>{{ views_dict.age }}</p>
?瀏覽器訪問效果: