1. 程式人生 > 程式設計 >Django正則URL匹配實現流程解析

Django正則URL匹配實現流程解析

一、引子

  在day17 作業中,我們檢視主機詳細資訊的時候,是通過 在url 中拼接,傳引數。urls 中匹配 path("detail/",views.detail)

Django正則URL匹配實現流程解析

這樣url 變成類似 http://127.0.0.1:8000/detail/?nid=2 今天我們來學習,類似http://127.0.0.1:8000/detail-3.html 這樣的URL

據說,以前我們使用的方式 ,在seo 時候算是動態頁面,後面這種方式算靜態頁面。可能在做搜尋優化的時候有好處吧。

二、開搞栗子

  忽略掉資料庫,先在 views 新建一個使用者字典

  2.1 動態頁面的栗子

    views 程式碼:

info_dic={
  1:{"name":"zhangsan","email":"[email protected]","age":22},2:{"name":"lisi","email":"[email protected]","age":27},3:{"name":"wangwu","email":"[email protected]","age":29},4:{"name":"laoliu","email":"[email protected]","age":30},5:{"name":"chenpi","email":"[email protected]","age":32},}

def index(request):
  return render(request,"index.html",{"info_dic":info_dic})


def detail(request):
  nid=request.GET.get("nid")
  print(nid,type(nid))
  info=info_dic.get(int(nid))
  print(info)
  return render(request,"detail.html",{"info":info})

    urls

Django正則URL匹配實現流程解析

  前端,index.html,

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  <h1>使用者資訊</h1>

  <ul>
    {% for k,v in info_dic.items %}
      <li><a target="_blank" href="/detail/?nid={{ k }}" rel="external nofollow" >{{ v.name }}</a></li>
    {% endfor %}

  </ul>
</body>
</html>

  前端,detail

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  <h1>使用者詳細資訊</h1>

  <ul>
    <li>name:{{ info.name }}</li>
    <li>email:{{ info.email }}</li>
    <li>age:{{ info.age }}</li>
  </ul>
</body>
</html>

  結果:

Django正則URL匹配實現流程解析

Django正則URL匹配實現流程解析

2.2 下面用 正則表示式來 搞URL 匹配,靜態頁面,

  urls

Django正則URL匹配實現流程解析

  views ,

直接在函式中傳引數,nid 形式引數。不像之前需要自己到 reques.method 中去取

Django正則URL匹配實現流程解析

  結果

Django正則URL匹配實現流程解析

上面的栗子中,我們得知引數是通過形參傳遞的,類似定義函式的形引數,

  下面再搞一個栗子驗證

Django正則URL匹配實現流程解析

Django正則URL匹配實現流程解析

Django正則URL匹配實現流程解析

Django正則URL匹配實現流程解析

引數位置變換後 ,獲取的數值也變了

Django正則URL匹配實現流程解析

三、分組傳參

  在上面的栗子中,我們知道如果不分組,那麼引數就是類似函式的位置引數,靠天吃飯,

很顯然,這樣不方便我們在實際的使用中去呼叫。那麼使用關鍵字引數呢,在URL 匹配中就需要分組

下面搞栗子,變換nid,uid 位置之後,列印的結果是一樣的。

Django正則URL匹配實現流程解析

位置引數可以在 *arg 中獲取,關鍵字引數可以在 **kwargs 中獲取

Django正則URL匹配實現流程解析

四、總結

路由系統:URL

  • 普通url:re_path('^index/',view.index),re_path('^home/',view.Home.as_view())
  • 順序傳參:re_path(r'^detail-(\d+)-(\d+).html/',views.detail),這個用*args接收
  • 關鍵字傳參:re_path(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html/',views.detail),這個用**kwargs接收,推薦使用這個

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。