1. 程式人生 > >Django的路由層詳情

Django的路由層詳情

code color name gif .py apps resp 知識 需要

1. Django的路由解析: 是從上往下進行匹配的

技術分享圖片
url(rindex, views.index)
#這裏的index 解析都可以被解析到的, abcindex   index   indexabc
url(r^index, views.index)
#這裏的index 解析是index  indexabc
url(r^index/$, views.index)
#這裏的index 解析是精確解析 只有index 才可以被解析

例題:
url(rindex/, views.index),
url(r^app1_index/, app1_views.index),
url(r
^app2_index/, app2_views.index), 這裏的解析是先 解析 index 後面的app1_index app2_index 都不會被解析到的
匹配模式

2. url 的分組模式,分為無名分組 和 有名分組兩大類

技術分享圖片
url(r^delete/(\d+)/(\d+)$, views.delete)  #這裏是無名分組
def delete(request, n1, n2)   #可以在views 內設置 n1,n2 隨便設置
請求路徑: http://127.0.0.1/delete/1/2
n1 拿到的值為1  n2 拿到的值為2

url(r^delete/(?P<id>\d+)/(?P<num>\d+)$
, views.delete) #這裏就是有名分組 def delete(request, id, pwd): #這裏是在 一定要寫id 和pwd 次序不能亂 請求路徑:http://127.0.0.1/delete/1/2 id 拿到的值為 1 pwd 拿到的值為2
有名分組和無名分組的區別

3. 有多個app的共存路由區分

技術分享圖片
from  app1 import  views as app1_views
from  app2 import  views as app2_views
#當出現app1 和app2 多個app存在時, 可以取別名來認識 as app1_views | app2_views
url(r^app1_index/, app1_views.index), url(r^app2_index/, app2_views.index), #各自去自己的index 內拿想要的信息 ,不會沖突,因為有別名來識別 在settings.py 文件內 添加最後的信息app1.apps.App1Config,app2.apps.App2Config, INSTALLED_APPS = [ django.contrib.admin, django.contrib.auth, django.contrib.contenttypes, django.contrib.sessions, django.contrib.messages, django.contrib.staticfiles, app.apps.AppConfig, app1.apps.App1Config, app2.apps.App2Config, ]
區分多個app的路由方法一 技術分享圖片
例題:
    1.from django.conf.urls import include
    # 在總路由裏面添加 include
    2.urlpatterns = [
        url(r^app01/, include(app01.urls)),
        url(r^app02/, include(app02.urls)),
      ]
    #  在總路由寫include 分發出去
    3. 在各自的app 創建一個 urls.py 文件 並寫入以下代碼
       from django.conf.urls import url

       from app1 import views

        urlpatterns = [
            url(rlogin/, views.login, name=login),
        ]

    #註意: http訪問的時候不能直接輸入http://127.0.0.1:8080/login 這樣識別不了
    # 一定要輸入http://127.0.0.1:8080/app1/login 如果是app2內的 就要輸入app2 不能直接輸入login
方法二: 通過路由分發

4. 小知識路由別名與方向解析的用法

技術分享圖片
6. 路由別名是幹什麽用的: 主要是吧路由的名字自定義,這樣路由名字修改了,前臺顯示的也不需要修改
    1. urlpatterns = [
        url(rlogin/, views.login ,name=login),
       ]
    #這裏name = ‘login‘ 這裏就是定義路由別名的名字

    2. <a href="{% url ‘login‘ %}"> dianwo </a>
    #在模板層 輸入 {% url ‘別名‘ %}  這樣就是定義好了路由別名

7. 反向解析的作用可以後臺映射拿到前面模板的內容信息:    註意:反向解析,解析的是路由別名,使用反向解析一定要先設置好路由別名
例題:
1. 在views 界面 添加  reverse
from django.shortcuts import render, HttpResponse, redirect, reverse

2. url(rlogin/,views.login,name=login), #無參數
    url(rlogin/(\d+)/$,views.login,name=login),  #無名分組
    url(rlogin/(?P<id>\d+)/$,views.login,name=login), #有名分組

3. {% url index %} #無參數 在模板層
    {% url index 123 %   } # 無名分組 在模板層
    {% url index id=446 %} # 又名分組 在模板層

4.  url =reverse(login)   #無參數
    url = reverse(index,args=(123,)) #無名參數
    url = reverse(login, kwargs={id:446}) #有名參數

例題:
def delete_flag_ready(request, id):

        print("可以刪除")

        url = reverse(delete_flag_test, kwargs={id: id})  # 反解對有名分組傳參
        url = reverse(delete_flag_test, args=(id, ))  # 反解對無名分組傳參
        print(>>>, url)
        return redirect(url)
    else:
        # 直接返回 index
        print("無需刪除")
        url = reverse(index)      #註意,這裏的反向解析,‘index‘是路由別名
        return redirect(url)
解析與路由別名

5. 案例:

技術分享圖片
‘‘‘
主路由:
from django.conf.urls import include
urlpatterns = [
    url(r‘^app01/‘, include(‘app01.urls‘, namespace=‘app01‘)),
    url(r‘^app02/‘, include(‘app02.urls‘, namespace=‘app02‘)),
]

app01應用下路由
from django.conf.urls import url
from app01 import views
urlpatterns = [
    url(r‘^test/‘, views.test, name=‘test‘)
]

app02應用下路由
from django.conf.urls import url
from app02 import views
urlpatterns = [
    url(r‘^test/‘, views.test, name=‘test‘)
]

前端頁面反向解析:{% url ‘app01:test‘ %} | {% url ‘app02:test‘ %}
視圖函數reverse方法:url = reverse(‘app01:test‘) | url = reverse(‘app02:test‘)
‘‘‘
案例綜合運用

Django的路由層詳情