Django快速入門——創建一個基本的投票應用程序
- 準備工作
- 1、創建虛擬環境
- 2、安裝django
- 1、請求和響應
- (1)創建項目
- (2)用于開發的簡易服務器
- (3)創建投票應用
- (4)編寫第一個視圖
- 1、編寫視圖函數
- 2、url映射
- URLconf文件中指定創建的polls.urls模塊
- 3、運行服務器
- 函數path()
- 2、模型和管理站點
- (1)數據庫配置
- (2)創建模型
- (3)激活模型
- 總結步驟
- (4)初試API
- (5)介紹Django管理頁面
- 創建一個管理員賬號
- (6)啟動開發服務器
- (7)進入管理站點頁面
- (8)向管理頁面加入投票應用
- (9)體驗便捷的管理功能
準備工作
1、創建虛擬環境
開始之前,最好創建一個虛擬環境來管理包。python自帶的“venv”工具就夠用了(輕量級且快速)
2、安裝django
檢查版本信息
1、請求和響應
(1)創建項目
自動生成的代碼配置一個django 項目(項目實例需要的設置項集合)
包含
- 數據庫配置
- Django配置
- 應用程序配置
cd到放置代碼的目錄,創建項目
django-admin startproject vote(可自定義名稱)
創建的目錄結構如下
- 最外層的 vote/根目錄只是你項目的容器,根目錄名稱對 Django 沒有影響,你可以將它重命名為任何你喜歡的名稱。
- manage.py:一個讓你用各種方式管理 Django 項目的命令行工具。
- 里面一層的 vote/目錄包含你的項目,它是一個純 Pyhon包。它的名字就是當你引用它內部任何東西時需要用到的 Python 包名。(比如vote.urls)
- vote/_init-.py:一個空文件,告訴 Python 這個目錄應該被認為是一個Python 包
- settings.py:Django 項目的配置文件
- asgi.py:作為你的項目的運行在 ASGI 兼容的 Web 服務器上的入口
- wsgi.py:作為你的項目的運行在 WSGI兼容的Web服務器上的入口
(2)用于開發的簡易服務器
確保項目真實創建
py manage.py runserver
訪問http://127.0.0.1:8000/:
你已經啟動了 Django 開發服務器,這是一個用純 Python 編寫的輕量級網絡服務器。我們在 Django 中包含了這個服務器,所以你可以快速開發,而不需要處理配置生產服務器的問題
(3)創建投票應用
項目vs應用
項目可以包含多個應用,應用可以被多個項目使用
在manage.py同級目錄下創建投票應用。(作為頂級模塊導入:在 Django 中,頂級模塊導入意味著你可以直接在項目的任何地方導入這個應用,而不需要使用相對導入)
(4)編寫第一個視圖
1、編寫視圖函數
polls\views.py編寫
from django.http import HttpResponse
def index(request):return HttpResponse("hello world.")
- 這是一個名為 index 的視圖函數,它接受一個 request 參數(即 HTTP 請求對象),并返回一個包含 “hello world.” 字符串的 HttpResponse 對象。這個視圖函數簡單地返回一個 HTTP 響應,顯示 “hello world.”。
要看到效果,需要將一個URL映射到它
2、url映射
新建文件 polls\url.py
在它里面編寫
from django.urls import path
from . import views
urlpatterns=[path("",views.index,name="index")
]
- urlpatterns 是一個列表,包含了一個 path 函數的調用。
- path 函數用于將 URL 路徑映射到視圖函數。
- “” 表示根路徑,即 http://yourdomain/。
- views.index 指定了當用戶訪問根路徑時要調用的視圖函數,這里是 index 視圖函數。
- name=“index” 是該 URL 模式的名稱,可用于在模板或代碼中引用該特定的 URL。
URLconf文件中指定創建的polls.urls模塊
from django.contrib import admin
from django.urls import include,pathurlpatterns = [path("polls/",include("polls.urls")),path("admin/", admin.site.urls),
]
- urlpatterns = [ … ]: 這是一個 URL 配置列表,定義了 URL 與視圖函數或其他 URL 配置之間的映射關系。
- path(“polls/”, include(“polls.urls”)): 這條路由規則指定了當用戶訪問 polls/ 路徑時,Django 將會將** 請求傳遞給 polls 應用程序的 urls.py 文件來處理**。include(“polls.urls”) 表示將 polls 應用程序中定義的 URL 配置引入到主 URL 配置中,允許在 polls 應用程序中定義更復雜的 URL 結構
URLconf 文件通常位于每個應用程序的根目錄下,命名為 urls.py。在這個文件中,我們可以使用 Django 提供的 path() 函數來定義 URL 路由規則。每個路由規則包含一個 URL 路徑和一個處理該路徑的視圖函數或另一個 URL 配置(通過 include() 函數引入其他應用程序的 URLconf)
什么時候用到include :當包括其他URL模式時應使用,admin.site.urls(默認的管理后臺URL配置)唯一例外
3、運行服務器
py manage.py runserver
訪問http://127.0.0.1:8000/polls/(注意 網頁不要訪問錯) 會出現:
函數path()
path()具有四個參數 兩個必須:route & view 。兩個可選參數:kwargs & name。
-
path()參數——route
route 是一個匹配 URL 的準則(類似正則表達式)。當 Django 響應一個請求時,它會從 urlpatterns 的第一項開始,按順序依次匹配列表中的項,直到找到匹配的項。
這些準則不會匹配 GET 和 POST 參數或域名。例如,URLconf 在處理請求 https://www.example.com/myapp/ 時,它會嘗試匹配 myapp/ 。處理請求 https://www.example.com/myapp/?page=3 時,也只會嘗試匹配 myapp/。
( ?page=3 只是附加的 GET 參數,Django 不會在 URL 路由匹配中考慮它) -
path()參數——view
django找到一個匹配的準則,就會調用這個特定的視圖函數。并傳入一個HttpRequest對象作為第一個參數,被“捕獲”的參數以關鍵字的形式傳入 -
path()參數——kwargs
任意個關鍵字參數可以作為一個字典傳遞給目標視圖函數 -
path()參數——name
為你的URL取名,能夠在django的任意地方唯一地引用它,尤其是在模板中。
(name 參數為 URL 模式提供了一個唯一標識符,方便在視圖和模板中引用。
它支持反向解析,使得生成 URL 更加動態和靈活。
提高了代碼的可讀性和可維護性,避免了硬編碼 URL 帶來的問題)
2、模型和管理站點
(1)數據庫配置
vote/settings.py 編輯它之前可以先設置時區
TIME_ZONE = “UTC” 表示 Django 項目使用 UTC 作為默認時區。這對于確保時間處理的一致性和可靠性非常有用,特別是在處理跨時區的應用時。如果需要使用其他時區,可以將 TIME_ZONE 設置為相應的時區名稱。(TIME_ZONE = “Asia/Shanghai” # 設置為北京時間)
默認開啟的某些應用需要至少一個數據表,執行
py manage.py migrate
結果:
Django的遷移代碼本質上是個歷史記錄,可以用來更新or回滾
(2)創建模型
在django里寫一個數據庫驅動的Web應用的第一步是定義模型——數據庫設計和附加的其他元數據
在這個投票應用中需要創建兩個模型,Question & Choice
這些概念可以通過一個python類來描述 models.py
class Question(models.Model):question_text = models.CharField(max_length=200)pub_date=models.DateField("data published")class Choice(models.Model):question=models.ForeignKey(Question,on_delete=models.CASCADE)choice_text=models.CharField(max_length=200)votes=models.IntegerField(default=0)
- ForeignKey 字段用于在兩個模型之間建立一對多的關系。通過 ForeignKey,每個 Choice 實例都可以引用一個 Question 實例。這意味著一個問題 (Question) 可以有多個選項 (Choice),但每個選項只能屬于一個問題。
- on_delete=models.CASCADE 參數指定了當關聯的 Question 實例被刪除時,所有相關的 Choice 實例也會被自動刪除。這有助于保持數據一致性,避免孤立的記錄
(3)激活模型
在vote\settings.py中 INSTALLED _APPS=[]添加
"polls.apps.PollsConfig"(別打錯)
此時Django項目包含了polls應用,接下來將被修改的模型部分儲存為一次遷移
py manage.py makemigrations polls
關于sqlmigrate:
接下來,再次運行migrate 命令,在數據庫中創建新定義的模型的數據表
遷移是非常強大的功能,它讓你在開發過程中持續的改變數據庫結構而不需要重新刪除和創建表,使得數據庫平滑升級而不丟失數據
總結步驟
- 編輯models.py文件,改變or創建模型——>添加應用
- 運行py manage.py makemigrations 為模型的改變生成遷移文件
- 運行py manage.py migrate 來應用數據庫遷移
數據庫遷移被分成生成和應用兩個命令的原因:
將數據庫遷移分為生成和應用兩個命令提供了更大的靈活性和控制力,有助于開發者在不同的開發階段進行細致的管理和操作。通過這種分離,開發者可以生成、審查、測試和應用數據庫變更,確保數據庫變更過程的安全性、可控性和可追溯性
(4)初試API
- Question.objects.all()會從數據庫中獲取所有的 Question 對象
總之 models.py 新增:
雙下劃線__ 是“魔術方法”,可以自動調用
接下來運行py manage.py shell驗證修改
將第三個創建的 Choice 對象賦值給變量 c,這樣可以在后續的代碼中直接訪問和操作這個對象
(5)介紹Django管理頁面
創建一個管理員賬號
py manage.py createsuperuser
(6)啟動開發服務器
Djongo的管理界面默認啟用。現在啟動開發服務器
py manage.py runserver
登錄
http://127.0.0.1:8000/admin/
可以通過修改settings.py文件 修改顯示語言
(7)進入管理站點頁面
(8)向管理頁面加入投票應用
要告訴管理,問題Question對象需要一個后臺接口顯示在index頁面里
打開polls/admin.py
from django.contrib import admin
from .models import Question
admin.site.register(Question)
(9)體驗便捷的管理功能
現在我們向管理頁面注冊了問題Question類 django將它顯示在索引頁面
點擊Questions
點擊What’s up?來編輯這個問題
保存并添加另一個
點擊歷史可以看到修改歷史
未完待續…