1. 程式人生 > 其它 >2. Django 建立專案app HTTP請求的url路由

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中去掉前面主路由檔案已經匹配上的部分, 將剩餘的部分去子路由檔案中檢視是否有匹配的路由項。