Django框架的url路由規(guī)則系統(tǒng)(七)

一、 urls.py的作用(項(xiàng)目目錄下的urls.py為根配置)

1、 URL配置(URL conf)就像是Django所支撐網(wǎng)站的目錄。它的本質(zhì)是URL模式以及要為該URL模式調(diào)用的視圖函數(shù)之間的映射表。以這樣的方式告訴Django,對(duì)于那個(gè)URL調(diào)用那段代碼。url的加載就是從根配置文件中開始。
2、注意事項(xiàng):

  • 當(dāng)一個(gè)請(qǐng)求來到時(shí),首先先到項(xiàng)目目錄下的urls.py(根URLconf模塊)中,查找相應(yīng)的路由規(guī)則。在urls.py中urlpatterns是一個(gè)列表,它里面的每個(gè)元素就是一個(gè)路由規(guī)則。
  • 根配置模塊中,里面定義了urlpatterns變量。
  • urlpatterns里面含有django.urls.path,django.urls.re_path對(duì)象。
  • 按順序運(yùn)行每個(gè)url路由規(guī)則,在被第一個(gè)匹配的url的規(guī)則(模式)匹配后停止。
  • 一旦匹配成功,django導(dǎo)入并且調(diào)用給定的視圖。
  • 如果中間出錯(cuò)誤或則沒有匹配到相應(yīng)的路由規(guī)則,返回404。

二、url(路由規(guī)則)例子

1、在項(xiàng)目目錄下urls.py文件中寫路由規(guī)則


2、在項(xiàng)目目錄創(chuàng)建了一個(gè)views.py文件

3、在地址欄中輸入url來進(jìn)行訪問django服務(wù)器
注意:只有當(dāng)你輸入的url跟后臺(tái)配置的url一致才會(huì)調(diào)用url對(duì)應(yīng)的視圖函數(shù)。當(dāng)?shù)刂窞椋?27.0.0.1:8000/test/python

三、 path方法的基本規(guī)則(重點(diǎn)):

1、示例:path('test/<xx>/',views.test)

  • 使用尖括號(hào)(<>)從url中捕獲值。包含一個(gè)轉(zhuǎn)化器類型(converter type),將匹配任何字符串,當(dāng)然也包括了 / 字符。
  • 當(dāng)前面的url匹配成功后就會(huì)調(diào)用后面的視圖函數(shù)。

2、基本格式:path(route,view,kwargs=None,name=None)

  • route:是一個(gè)字符串形式的url規(guī)則。
  • view:是一個(gè)視圖函數(shù)。
  • kwargs:是一個(gè)額外參數(shù),傳遞給view,必須是一個(gè)字典形式。
  • name:url的命名。

3、在url中捕獲參數(shù)

  • 在url規(guī)則中可以使用'<對(duì)應(yīng)視圖函數(shù)的參數(shù)>'就可以捕獲url中的值,傳遞給相應(yīng)的視圖函數(shù)。

4、類型轉(zhuǎn)化器

  • 主要將捕獲的url轉(zhuǎn)化為相應(yīng)的類型。

四、path方法中支持的轉(zhuǎn)換器

  • str
    匹配除了路徑分隔符(/)之外的非空字符串,這是默認(rèn)的形式。
  • int
    匹配正整數(shù),包含0。
  • slug
    匹配字母、數(shù)字以及橫杠、下劃線組成的字符串。
  • uuid
    匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
  • path
    匹配任何非空字符串,包含了路徑分隔符。

五、轉(zhuǎn)換器的使用

1、設(shè)置url路由規(guī)則:
path('test/<int:xx>/',views.test3)#指定被捕獲的參數(shù)為整數(shù)類型。
2、在視圖中將獲取到的參數(shù)和參數(shù)的類型打印出來:

def test3(request,xx):

    print(xx,type(xx))

    return HttpResponse('hello %s'%xx)

注意:注意:xx名稱必須要一致。
3、完整示例:

path('detail/<pk>-<slug>/', views.detail) #可以用-來連接,但是參數(shù)必須位置相同。
def detail(request, pk, slug):   
        return HttpResponse('這是第%s個(gè)學(xué)生,%s太壞了'% (pk, slug))

六、re_path方法的正則匹配

1、urls.py文件中的代碼

re_path('^hello/$',views.test5),

re_path('^hello/(?P<yy>[0-9]+)/',views.test6),

2、views.py文件中的代碼

def test5(request):

    return HttpResponse('這是用的re_path設(shè)置的')

def test6(request,yy):

    print(yy,type(yy))

    return HttpResponse('hello %s'%yy)

3、注意注意:

  • re_path(r'students/(?P<year>\d{4})/(?P<month>[0-9]|1[0-2])/', views.students),當(dāng)分了組就要和位置參數(shù)一一對(duì)應(yīng),不分組和關(guān)鍵字參數(shù)一一對(duì)應(yīng)。
  • django的url只搜索路徑部分,跟參數(shù)以及請(qǐng)求方法無關(guān)。

七、項(xiàng)目目錄下和app下的urls.py

1、一個(gè)url對(duì)應(yīng)一個(gè)視圖函數(shù),但我們的視圖越來越多時(shí),url也就越來越多。

2、include的作用:一個(gè)project有一個(gè)總的urls.py,各個(gè)app也可以自己建立自己的urls.py,用include()函數(shù)在project的urls.py文件進(jìn)行注冊(cè)。

3、include使用的例子如下:

  • 項(xiàng)目目錄下的主urls.py
from django.contrib import admin
from django.urls import path,include
from . import views
urlpatterns = [ path('admin/', admin.site.urls), path('book/',include('book.urls')),] 
  • 為APP中books里面的urls.py
from django.urls import path

from . import views

urlpatterns = [ path('index/',views.index), ] 
  • 為APP中books里面的views.py
from django.http import HttpResponse
def index(request):
return HttpResponse('這個(gè)book的首頁!!')

八、kwargs參數(shù)的作用

1、kwargs傳遞一個(gè)Python 字典作為額外的參數(shù)傳遞給視圖函數(shù)。

# 主urls.py文件
from django.contrib import admin
from django.urls import path,include
urlpatterns = [ path('admin/', admin.site.urls), path('book/',include('book.urls'),{'switch':'true'}),]

2、Kwargs為字典類型可以傳遞額外的參數(shù)到views中使用,include的時(shí)候需要統(tǒng)一給下面的url一些參數(shù)的時(shí)候可以用此參數(shù)。并且視圖函數(shù)中可以通過關(guān)鍵字參數(shù)獲取到。

# 為APP中books里面的views.py
from django.http import HttpResponse
import datetime
def index(request,**kwargs):
    if kwargs.get('switch') == 'true':
        print(datetime.datetime.now())
    return HttpResponse('這個(gè)book的首頁!!') 

3、注意事項(xiàng)

  • 在path,re_path方法中,可以向視圖函數(shù)傳遞一個(gè)kwargs字典參數(shù)。
    當(dāng)kwargs中的key與url捕獲的key一致的時(shí)候,以kwargs中的key為主。
re_path(r'students/(?P<year>\d{4})/(?P<month>[0-9]|1[0-2])/', views.students, kwargs={'swich': True})
ef students(request, year, month, swich):

        return HttpResponse('這是%s年%s月%s'% (year,month, swich))
  • 如果是在根配置urls.py中的話,即如下面所示:
urlpatterns = [ path('admin/', admin.site.urls), path('teacher/', include('teacher.urls'),kwargs={'swich': True})]

這樣就會(huì)給teacher子應(yīng)用的每條路由規(guī)則傳一個(gè){'swich': True}參數(shù),有的時(shí)候業(yè)務(wù)需求要。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、前言 在django程序中,可以通過urls.py文件對(duì)所有的url進(jìn)行任務(wù)的分配,URL配置(URLconf...
    NewForMe閱讀 603評(píng)論 0 0
  • 若能避開猛烈的狂喜,自然也不會(huì)有悲傷的來襲。 ??URL配置(URLconf)就像Django 所支撐網(wǎng)站的目錄。...
    一個(gè)無趣的人W閱讀 729評(píng)論 0 1
  • 一,url路由path及轉(zhuǎn)化器 URL(uniform Resoure Locator)統(tǒng)一資源定位符,是對(duì)可以從...
    木葉望將閱讀 2,408評(píng)論 0 1
  • URL是Web服務(wù)的入口,用戶通過瀏覽器發(fā)送過來的任何請(qǐng)求,都是發(fā)送到一個(gè)指定的URL地址,然后被響應(yīng)。在Djan...
    汪菲宇閱讀 789評(píng)論 0 0
  • 仇靖下了朝,和術(shù)冕商談水運(yùn)之事,宮女慌慌張張的跑來稟告。 “陛下,塵公子被顧大人帶走了!” “什么!”仇靖一愣,微...
    木南思閱讀 447評(píng)論 1 1

友情鏈接更多精彩內(nèi)容