日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

配置路由urlconf

發(fā)布時(shí)間:2024/1/8 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 配置路由urlconf 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一般配置路由在urls.py文件中

urlpatterns = [path('正則表達(dá)式',views.視圖函數(shù),參數(shù),別名), ] 參數(shù)說明: 1、一個(gè)正則表達(dá)式字符串 2、一個(gè)可調(diào)用對象,通常為一個(gè)視圖函數(shù)或一個(gè)指定視圖函數(shù)路徑的字符串 3、可選的要傳遞給視圖函數(shù)的默認(rèn)參數(shù)(字典形式) 4、一個(gè)可選的name參數(shù)(別名) 例子: urlpatterns = [path('index/<int:year>',views.hello),path('addstudent/<str:name>',views.add_student), ]
  • 注意
  • 要捕獲一段url中的值,需要使用尖括號,而不是之前的圓括號;
  • 可以轉(zhuǎn)換捕獲到的值為指定類型,比如例子中的int:name。默認(rèn)情況下,捕獲到的結(jié)果保存為字符串類型,不包含/這個(gè)特殊字符;
  • 規(guī)則的前面不需要添加/,因?yàn)槟J(rèn)情況下,每個(gè)url都帶一個(gè)最前面的/。比如:articles, 不能寫成 /articles。
  • path轉(zhuǎn)換器

    • django默認(rèn)情況下內(nèi)置的路由轉(zhuǎn)換器:

      1 str 匹配任何非空的字符串,不包含/ 為django的默認(rèn)轉(zhuǎn)換器 path(‘index’,add/str:name,views.test)
      2 int 匹配0和正整數(shù),返回一個(gè)int類型 path(‘index’,add/int:name,views.test)
      3 slug 匹配任何ascii字符以及連接符 下劃線 例如:lixinyu_1-test (不常用)
      4 uuid 存儲通用唯一識別碼 但是字母必須小寫,必須使用破折號 返回uuid對象 (不常用)
      5 path 匹配任何非空字符串,可以包含/ 此轉(zhuǎn)換器可以匹配整個(gè)url而不是一段一段url字符串(不常用)

    正則表達(dá)式路由

    • 正則表達(dá)式中 使用的是re_path()
      • 在python正則表達(dá)式中,命名正則表達(dá)式的語法是(?Ppattern),其中name是組的名稱,pattern是需要匹配的規(guī)則

      • 特點(diǎn) 1 year中匹配不到非四位數(shù)字,這是正則表達(dá)式?jīng)Q定的
        2 傳遞給視圖的所有參數(shù)都是字符串類型


        from django.urls improt path,re_path
        from 項(xiàng)目app文件夾 import views
        urlpatterns = [
        path(‘a(chǎn)dd/2003/’,views.add_student),
        #表示add/2003/這個(gè)路徑映射views模塊的add_student函數(shù)
        re_path(r’^add(?P[0-9]{4})/KaTeX parse error: Expected 'EOF', got '#' at position 28: …_student), #?表示匹配4個(gè)0-9的任意數(shù)字,…’, views.add_student),
        表示匹配數(shù)字,不進(jìn)行傳參。

    指定視圖參數(shù)的默認(rèn)值

    • 使用視圖參數(shù)的默認(rèn)值就是給視圖函數(shù)中賦值,而后傳遞到路由中


      from django.urls import path
      from blog import views
      urlpatterns = [
      path(‘a(chǎn)dmin/’, admin.site.urls),
      path(‘blog/int:num/’,views.study),
      path(‘blog/pageint:num/’,views.study),
      ]

      #views.py中創(chuàng)建
      def study(request, num=1):
      return HttpResponse(‘展示內(nèi)容’)

      地址內(nèi)輸入
      http://127.0.0.1:8000/blog/1/
      http://127.0.0.1:8000/blog/page1/

      兩個(gè)URL模式指向同一個(gè)視圖views.study —— 但是第一個(gè)模式不會(huì)從URL 中捕獲任何值。如果第一個(gè)模式匹配,page() 函數(shù)將使用num參數(shù)的默認(rèn)值"1"。如果第二個(gè)模式匹配,page() 將使用正則表達(dá)式捕獲的num 值。

    錯(cuò)誤頁面處理

    當(dāng)Django找不到與請求匹配的URL時(shí),或者拋出一個(gè)異常時(shí),將調(diào)用一個(gè)錯(cuò)誤處理視圖。錯(cuò)誤視圖包括400、403、404和500,分別表示請求錯(cuò)誤、拒絕服務(wù)、頁面不存在和服務(wù)器錯(cuò)誤
    • handler400 ——django.conf.urls.handler400 請求錯(cuò)誤

    • handler403 ——django.conf.urls.handler403 拒絕服務(wù)

    • handler404 ——django.conf.urls.handler404 頁面不存在

    • handler500 ——django.conf.urls.handler500 服務(wù)器錯(cuò)誤

      這些值可以在根URLconf中設(shè)置 在其它app中的二級URLconf中設(shè)置這些變量無效
      Django中又內(nèi)置的HTML模板,用域返回錯(cuò)誤頁面給用戶,也可以自定義錯(cuò)誤頁面
      首先在根URLconf中額外增加下面的條目
      from django.conf.urls import url
      from blog import views
      urlpatterns = [
      url(r’^blog/ ′ , v i e w s . s t u d y ) , u r l ( r ′ b l o g / p a g e ( ? P &lt; n u m &gt; [ 0 ? 9 ] + ) / &#x27;, views.study), url(r&#x27;^blog/page(?P&lt;num&gt;[0-9]+)/ ,views.study),url(rblog/page(?P<num>[0?9]+)/’, views.study),
      ]
      #增加的條目
      handler400 = views.bad_request
      handler403 = views.permission_denied
      handler404 = views.page_not_found
      handler500 = views.page_error

      在views.py中增加四個(gè)處理視圖
      def page_not_found(request):
      return render(request, ‘404.html’)

      def page_error(request):
      return render(request, ‘500.html’)

      def permission_denied(request):
      return render(request, ‘403.html’)

      def bad_request(request):
      return render(request, ‘400.html’)
      而后根據(jù)需要在templates文件夾下創(chuàng)建404.html、403.html、400.html、500.html四個(gè)頁面

    urls分層模塊化(路由分發(fā))

    • 通常在每個(gè)app里各自創(chuàng)建一個(gè)urls.py路由模塊,從根路由出發(fā),將所屬url請求全部轉(zhuǎn)發(fā)到想用的urls.py模塊中

      from django.urls import include,path
      urlpatterns = [
      path(‘community/’, include(‘a(chǎn)ggregator.urls’)),
      path(‘contact/’, include(‘contact.urls’))
      ]

    路由轉(zhuǎn)發(fā)使用的時(shí)include()方法,需要提前導(dǎo)入,參數(shù)是轉(zhuǎn)發(fā)目的地路徑的字符串,路徑以圓點(diǎn)分割

    例子中的正則表達(dá)式?jīng)]有包含$,但是包含一個(gè)末尾的斜杠,每當(dāng)Django遇到include()(來自django.conf.urls.include())時(shí),會(huì)去掉url中匹配的部分并將剩下的字符串發(fā)送給include的URLconf做進(jìn)一步處理,也就是轉(zhuǎn)發(fā)二級路由。

    個(gè)人觀點(diǎn):

    路由分發(fā)就是項(xiàng)目本身的路由不承擔(dān)過多的路由,將路由分發(fā)到子app的urls.py中,功能類似于藍(lán)圖的作用

    在項(xiàng)目本身urls.py里導(dǎo)入include,本身主urls.py只負(fù)責(zé)設(shè)置子路由的路徑,而后在子app設(shè)置路由參數(shù)。

    主app url_pro/urls.pyfrom django.contrib import admin from django.urls import path,re_path,include from url_app import views urlpatterns = [path('admin/', admin.site.urls),path('abc/',include('url_app.urls',namespace='url_app')),path('url_app1/', include('url_app1.urls',namespace='url_app1')) ]子app url_app1/urls.pyfrom django.urls import path,re_path from . import views# 子路由文件 app_name = 'url_app1' urlpatterns = [#path('',views.index)#re_path(r'^$',views.index)#re_path(r'([a-z]{3})/(\d+)/',views.index)#path('<int:id_>/<str:name>/',views.index)re_path(r'^$',views.index,name='index') ]url_app/urls.pyfrom django.urls import path,re_path from . import views # 子路由文件app_name = 'url_app' urlpatterns = [#path('',views.index)#re_path(r'^$',views.index)#re_path(r'([a-z]{3})/(\d+)/',views.index)#path('<int:id_>/<str:name>/',views.index)path('test/',views.test,name='test'),path('redir/',views.redir,name='redir'),re_path(r'index/',views.index,name='index') ]

    問:URLconf匹配請求URL中的哪些部分?

    答 : 請求的URL被看做是一個(gè)普通的Python字符串,URLconf在其上查找并匹配。進(jìn)行匹配時(shí)將不包括GET或POST請求方式的參數(shù)以及域名。 URLconf不檢查使用何種HTTP請求方法,所有請求方法POST、GET、HEAD等都將路由到同一個(gè)URL的同一個(gè)視圖。在視圖中,才根據(jù)具體請求方法的不同,進(jìn)行不同的處理。 例如: 在http://qzone.qq.com/8436830/的請求中,URLconf將查找8436830 http://qzone.qq.com/8436830/?page=4的請求中,URLconf也將查找8436830

    總結(jié)

    以上是生活随笔為你收集整理的配置路由urlconf的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。