Django的路由層詳情
阿新 • • 發佈:2019-04-26
code color name gif .py apps resp 知識 需要
1. Django的路由解析: 是從上往下進行匹配的
url(r‘index‘, views.index) #這裏的index 解析都可以被解析到的, abcindex index indexabc url(r‘^index‘, views.index) #這裏的index 解析是index indexabc url(r‘^index/$‘, views.index) #這裏的index 解析是精確解析 只有index 才可以被解析 例題: url(r‘index/‘, 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區分多個app的路由方法一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‘, ]
例題: 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(r‘login/‘, 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(r‘login/‘, 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(r‘login/‘,views.login,name=‘login‘), #無參數 url(r‘login/(\d+)/$‘,views.login,name=‘login‘), #無名分組 url(r‘login/(?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的路由層詳情