1. 程式人生 > 其它 >Django框架:路由層

Django框架:路由層

目錄

Django中的路由層


一、視覺化介面之增刪改查

針對資料物件主鍵欄位的互毆去可以使用更加方便的obj.pk,就不用看主鍵欄位的欄位名了

補充:

a標籤中href="#"表示不跳轉

form表單中能夠觸發提交動作的按鈕只有兩個

  • input type="submit"

  • buttontype="submit"

    在web頁面展示上和功能上一致

1.資料展示

  • 開設介面、獲取資料、傳遞頁面、展示頁面

(1)開設介面

在urls中新增好對應關係

前端:先編寫最簡單的使用者資料展示頁面

(2)獲取資料

後端:獲取資料庫資料

(3)傳遞頁面

通過模版語法展示出資料庫獲取的資料

2.資料的新增功能

(1)開設介面

在urls中新增好對應關係,前端:在展示資料的頁面上新增新增資料的按鈕,點選跳轉到新增資料的頁面

(2)獲取資料

後端:獲取前端提交的資料,新增邏輯判斷後存入資料庫

3.資料的編輯功能

(1)開設介面

(2)獲取向編輯的使用者的資訊,通過get請求後新增額外的引數,將當前想修改的使用者的主鍵傳遞過去,?攜帶引數

(3)後端獲取使用者資料

(4)前端展示預設資料

(5)同上

4.資料的刪除功能

(1)開設介面

在urls中新增好對應關係,前端:在展示資料的頁面上點選刪除的按鈕,執行刪除的功能函式

(2)獲取刪除的使用者id

通過request.get()

獲取標籤提交的資料

(3)後端判斷

新增點選事件,當刪除時,先判斷是否真的刪除,點選確定再刪除

<script>
    $('.c1').click(function () {
        let res = confirm('確認刪除使用者{{ data.name }}的資料嗎')
        if (res) {
        } else {
            return false
        }
    })
</script>

二、Django請求生命週期流程圖

1.web服務閘道器介面

web服務閘道器介面協議-WSGI協議,wsgiref和uwsgi都是該協議的兩種不同功能模組

  • Wsgiref.py

    django預設的閘道器介面,能承受的併發量特別低,只用於本地,實際專案中會切換成uwsgi。

    解析請求格式,打包成request大字典;或者打包好資料返回給瀏覽器,滿足HTTP協議

  • uwsgi

    上線之後切換成uwsgi,併發量比wsgiref高很多

2.整個Django後端

1)中介軟體:Django的保安,忽略

2)路由層:urls.py -路由和檢視函式的對應關係

3)檢視層:views.py(每個應用有一個,多個應用總共有多個)

4)與檢視層互動的模版層和模型層

  • 模版層:templates目錄,django提供的模版語法

  • 模型層:models.py 提供orm語法,可以連線資料庫

3.MySQL資料庫:與模型層互動

三、Django路由層

路由和檢視函式的對應關係

1.路由匹配

(1)Django的版本與路由匹配問題

django2.x以及以上,urls.py中path第一個引數寫什麼就匹配什麼

django1.x第一個引數是正則表示式

/user_list
/user_list/

上面的兩個路由是不同的,無論什麼版本,django都自帶自動加/並重定向的功能,可以看到當user_list在路由匹配中找不到的時候,django會自動新增/並重定向

該重定向功能可以取消,在settings.py中,將APPEND_SLASH改為False

(2)路由匹配本質

特點:path第一個引數寫什麼就匹配什麼

2.轉換器的有名分組

網站上都會有很多相似的網址,如果每個都單獨開設路由並不合理;

所以,很多相似的路由應該整合到一起,這就用到了Django提供的轉換器

(1)轉換器

  • 型別:字串轉換器<str:info>,整形轉換器<int:info>

  • 轉換器的作用:接收多個路由拼接在一起,將對應位置匹配到的資料轉換成固定型別

轉換器捕捉info的時候,會將info轉換成固定型別,然後當成引數傳入檢視函式,形式如下

index_func(request,info='型別轉換後的內容')

path('路由/<str:info>/',veiws.檢視函式func)
檢視函式func(request, info='型別轉換後的內容')

動態匹配動態內容,還可以給檢視函式的穿引數進去,或者寫成(request,**kwargs)相容性更強

檢視函式func(request, **kwargs)

還支援自定義轉換器,自己寫正則表示式,匹配更加細化的內容

3.正則匹配re_path

  • re_path

簡介:django 2.x及以上版本中的模組,第一個引數是正則表示式

re_path('test', views.test)
# test則是正則表示式,在輸入的網址的路由中,只有含義test則立即執行對應的檢視函式

正則匹配的原則:只要第一個正則表示式能夠從使用者輸入到路由中匹配到資料就算匹配成功,就會立刻從停止在路由層匹配,而直接執行對應的檢視函式

通過正則表示式的符號可以提供更多的限制

re_path('^test/$', views.test)  
# 限制開頭和結尾,精準匹配/test/

4.正則匹配的無名分組與有名分組

通過正則匹配,我們可以自己定義匹配的規則

(1)無名分組

無名分組會將括號內正則匹配到的內容當作位置引數傳給檢視函式

re_path('^test/(\d{4})/', views.test)

(2)有名分組

有名分組:給分組起別名(?p<別名>),檢視函式會按照關鍵字傳參的方式,這種叫做有名分組

有名分組:會將括號內正則匹配到的內容當作關鍵字引數傳遞給檢視函式

re_path('^test/(?P<year>\d{4})/', views.test)

注意:

正則匹配的無名分組和有名分組,使用時只能選擇一種,不能混合使用

四、反向解析

類似於靜態檔案的動態解析

通過反向解析的語法,找到對應關係

1.反向解析的含義

通過起一個別名,可以反向解析出一個結果,這個結果可以訪問到一個對應到路由,可以訪問到對應的一個檢視函式(減少耦合,動態匹配)

2.反向解析的用法

(1)路由匹配關係起別名

給路由和檢視函式的對應關係,起一個別名,只要別名不變,就可以通過這個別名找到他們的對應關係

(2)使用反向解析語法

在前端html頁面或者後端檢視函式中,使用反向解析動態匹配路由

3.正則匹配與轉換器

(1)正則匹配的反向解析

1) html頁面上的模版語法

{% url '對應關係別名' %}

2)後端語法

通過匯入reverse模組,填寫路由和檢視函式對應關係的別名,可以反向解析出他們的對應關係

reverse('login_view')

(2)轉換器的反向解析-動態路由的反向解析

1.前端上

  • 路由中有動態的部分-->轉換器
  • html頁面上使用模版語法

除了在檢視函式中傳一個關鍵字引數,需要在html頁面上,將路由中動態的部分做一個限定

2.後端語法

通過reverse中args引數傳遞動態解析的限制