天天看點

Django如何處理URL請求

  1. Django從配置檔案中根據

    ROOT_URLCONF

    找到主路由檔案,也就是我們的主目錄下的

    urls.py

  1. Django找到

    urls.py

    中的

    urlpatterns

    變量,該内容是一個包含多個路由的數組.
from django.contrib import admin
from django.urls import path
from . import views
# 項目的主路由配置-HTTP進入請求Django後,優先調用urls

urlpatterns = [
    path('admin/', admin.site.urls),
    path('apps/django/',views.apps_dijango),
]           

複制

  1. 依次比對

    urlpatternes

    中的

    path

  2. 比對成功-調用對應函數視圖
  3. 比對失敗-傳回404

視圖函數

視圖函數是一個用來接收浏覽器請求(HttpRequest)對象并通過

HttpRequest

對象傳回響應函數。此函數可以接收浏覽器請求并根據業務邏輯傳回相應的内容.

文法

# 第一個參數必須為Request,其他參數可以依次向後寫
def api_tools(request): 
    return HttpResponse           

複制

路由配置

from django.urls import path
ali = {
    path(route,views,name=None),
    path(route2,views.page2)
}
參數;
1. route: 字元串類型,比對請求路徑
2. views: 指定路徑對應視圖處理函數的名稱,需要與views比對
3. name: 為位址起别名,在模闆中位址反向解析時使用           

複制

Path轉換器

文法

<轉換器類型:自定義名>
path('page/<int:page>',views.page)
# 以下是視圖函數内容
def test(request,page_num):

    return HttpResponse(page_num)           

複制

作用:若轉換器類型比對到對應類型的資料,則将資料按照關鍵字傳參的方式傳遞給視圖函數。

轉換器類型

  • str

    :比對除了

    /

    之外的非空字元串
/v1/api/<str:toolsname>
    	比對
/v1/api/coretools           

複制

  • int

    : 比對或任何整數,可以傳回一個Int
/v1/api/<int:page>
    	比對
/v1/api/100           

複制

  • slug

    : 比對任意由ASCII字母或數字以及連字元和下劃線組成的短标簽
/v1/api/<slug:sl>
    	比對
/v1/api/this-is-user_list           

複制

  • path

    :比對非空字段,包括路徑分隔符

    /

/v1/api/<path:ph>
    	比對
/v1/api/a/b/c           

複制

re_path

在url的比對過程中可以使用正規表達式進行精确比對

文法

from django.urls import re_path

re_path(reg,view,name=xxx)
# 正規表達式為命名分組模式(?P<name>pattern)比對提取參數後用關鍵字傳參方式傳遞給視圖函數           

複制