Django-02 url、視圖函數、路由配置、path轉換器、re_path URL Django處理url請求 視圖函數 路由配置 path轉換器 re_path

URL

URL語法格式爲([]代表其中的內容可省略)

Django處理url請求

  1. Django從配置文件中根據ROOT_URLCONF找到主路由文件;默認情況下,該文件在項目同名目錄下的urls;例如mysite1/mysite1/urls.py
  2. Django加載主路由文件中的urlpatterns變量[包含很多路由的數組]
  3. 依次匹配urlpatterns中的path,匹配到第一個合適的中斷後續匹配
  4. 匹配成功 - 調用對應的視圖函數處理請求,返回響應
  5. 匹配失敗 - 返回404響應

視圖函數

  • 視圖函數是用於接收一個瀏覽器請求(HttpRequest對象)並通過HttpResponse對象返回響應的函數。此函數可以接收瀏覽器請求並根據業務邏輯返回相應內容給瀏覽器
  • 語法
 def xxx_view(request[,其他參數...]):
      return HttpRespnose對象
  • 樣例
    # file:<項目同名文件夾下>/views.py
from django.http import HttpResponse

def page_2003_view(request):
  html = "<h1>這是第一個頁面</h1>"
  return HttpResponse(html)

路由配置

  • settings.py中的ROOT_URLCONF指定了主路由配置列表urlpatterns的文件位置
    # file:<項目同名文件夾下>/urls.py
urlpatterns=[
  path('page/2003/',views.page_2003_view),
  ...#此處配置主路由
]
  • path()函數
  • 導入 - from django.urls import path
  • 語法 - path(route,views,name=None)
  • 參數
    1. route:字符串類型,匹配的請求路徑
    2. views:指定路徑所對應的視圖處理函數的名稱
    3. name:爲地址起別名,在模板中地址反向解析時使用

path轉換器

  • 語法:<轉換器類型:自定義名>
  • 作用:若轉換器類型匹配到對應類型數據,則將數據按照關鍵字傳參的方式傳遞給視圖函數
  • 例子:path('page/<int:page>',views.xxx)
轉換器類型 作用 樣例
str 匹配除了'/'之外的非空字符串 "v1/users/<str:username>"匹配/v1/users/guoxiaonao
int 匹配0或任何正整數。返回一個int "page/<int:page>"匹配/page/100
slug 匹配任意由ASCII字母或數字以及連字符和下劃線組成的短標籤 "detail/<slug:sl>"匹配/detail/this-is
path 匹配非空字符串,包括路徑分隔符'/' “v1/users/<path:ph>”匹配/v1/goods/a/b/c
  • 小練習:計算器
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
    path('<int:num1>/<str:opt>/<int:num2>',views.cal_view)
]
def cal_view(request,num1,opt,num2):
    if opt not in ['add','sub','mul']:
        return HttpResponse("Your opt is wrong")
    result = 0
    if opt == 'add':
        result = num1+num2
    elif opt == 'sub':
        result = num1 - num2
    else :
        result = num1 * num2
    return HttpResponse("result is %s"%result)

re_path

  • 在url的匹配過程中可以使用正則表達式進行精確匹配
  • 語法:
    • re_path(reg,view,name=xxx)
    • 正則表達式爲命名分組模式(?P<name>pattern);匹配提取參數後用關鍵字傳參方式傳遞給視圖函數
  • 樣例
    # 可匹配http://127.0.0.1:8000/20/mul/30
    # 不可匹配 http://127.0.0.1:8000/200/mul/400
urlpatterns=[
  re_path(r'^(?P<x>\d{1,2})/(?P<op>\w+)/(?P<y>\d{1,2})$',views.cal_view)
]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章