2. Django 建立專案app HTTP請求的url路由
技術標籤:# Django
作業系統:windows
IDE:Pycharm
關鍵詞彙:
url路由
http請求處理
ORM資料庫操作
建立專案app:
Django 中的一個app 就是專案裡面的一個應用(application),一個完整的專案包含多個app。一個app 通常就是一個相對獨立的模組 ,實現相對獨立的功能。講一個專案分成多個app可以使專案結構更加清晰,也方便後續的優化。
一個app 本質上 就是一個 Python 包, 裡面包含了一些應用相關的程式碼檔案。
Django 中建立app 可以 通過執行命令,建立一個app目錄,並在裡面自動建立app常用的檔案。
我們就進入專案根目錄(在Pycharm中專案根目錄右鍵,選擇Open In Terminal
python manage.py startapp sales
這樣就會建立一個目錄名為 sales, 對應著名為 sales 的app,裡面包含了如下自動生成的檔案。
view.py
通常就是編寫處理http請求程式碼的檔案
伺服器返回內容給瀏覽器:
瀏覽器輸入網址並敲回車訪問,瀏覽器會對目標網址傳送一個http請求,對應網址的伺服器會返回相應的html文件內容給瀏覽器,瀏覽器解析後,最終呈現為使用者看到的網頁內容。
剛才建立的 sales 應用裡面 有個 views.py
檔案。 這個檔案裡面通常是編寫處理http 請求的程式碼的。
比如,我們可以設定當瀏覽器訪問的http 請求的 url 地址 是 /sales/orders/
views.py
裡面的函式 listorders
來處理, 返回一段字串給瀏覽器。
在views.py中加入如下內容:
from django.http import HttpResponse
def listorders(request):
return HttpResponse("下面是系統中所有的訂單資訊。。。")
注意:
- 這裡面最終的返回結果是
HttpResponse
物件的引數字串 ,就是那句話 - listorders的引數
request
是Django中的HttpQuest
物件,包含了請求中的資訊。
但這只是定義了這樣一個函式,框架並不知道這樣的關聯關係。如何實現當前端傳送過來的HTTP請求 url地址是 /sales/orders/
views.py
裡面的函式 listorders
來處理呢?答: 需要Django中的url路由設定。
url路由設定:
和專案同名的包下,有一個名為urls.py
的檔案,這個檔案就是url路由設定的路口檔案
編寫路由時,可以用 路由子表 的方式,使得結構清晰,也方便修改。通常可以將不同的路由記錄按照功能分拆到不同的url路由子表文件中。
比如,這裡我們可以把訪問的 url 凡是以 sales 開頭的全部都由 sales app 目錄下面的子路由檔案 urls.py 處理。別的開頭就用別的app目錄下的urls.py來處理。
例如同樣是/sales/orders/
,可以直接在url.py
中的urlpatterns
中增加一條:
from django.contrib import admin
from sales.views import listorders
urlpatts = {
path('admin/', admin.site.urls), #自帶的
path('/sales/orders/',listorders),
}
而更好的寫法是,在url.py
中新增:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('sales/', include('sales.urls')),
# path('mgr/', include('mgr.urls'))
]
注: include
是Django裡一個專門處理路由的函式。
然後再在sales目錄下面建立一個新的檔案 urls.py
並新增上:
from django.urls import path
from sales.views import listorders
urlpatterns = [
path('orders/', listorders),
]
當一個http請求過來時, Django檢查 url,比如這裡是sales/orders/
,先到主url路由檔案 urls.py中檢視是否有匹配的路由項。如果有匹配 ( 這裡匹配了 sales/
), 並且匹配的物件是一個子路由設定 , 比如這裡是include('sales.urls')
就會去子路由檔案中(sales\urls.py)中檢視 。
這時,會從請求url中去掉前面主路由檔案已經匹配上的部分, 將剩餘的部分去子路由檔案中檢視是否有匹配的路由項。