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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django路由层

發布時間:2024/1/8 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django路由层 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

路由層

?

?

?url攜帶的第一個參數就是正則表達式,

一旦前面匹配到了內容 就不會往下繼續匹配了? 而是執行相應的視圖函數

?

?

?像上方這樣的正則表達式 不管輸入testadd,還是test永遠無法執行testadd對應的視圖函數

正是由于上面的特性 當你的項目特別龐大的時候 url的前后順序也是你需要你考慮
極有可能會出現url錯亂的情況

django在路由的匹配的時候 當你在瀏覽器中沒有敲最后的斜杠
django會先拿著你沒有敲斜杠的結果取匹配 如果都沒有匹配上 會讓瀏覽器在末尾加斜杠再發一次請求 再匹配一次 如果還匹配不上才會報錯
如果你想取消該機制 不想做二次匹配可以在settings配置文件中 指定
APPEND_SLASH = False # 該參數默認是True

路由分發(重點)

當你的django項目特別龐大的時候 路由與視圖函數對應關系特別特別多
那么你的總路由urls.py代碼太過冗長 不易維護

每一個應用都可以有自己的urls.py,static文件夾,templates文件夾(******)

正是基于上述條件 可以實現多人分組開發 等多人開發完成之后 我們只需要創建一個空的django項目
然后將多人開發的app全部注冊進來 在總路由實現一個路由分發 而不再做路由匹配(來了之后 我只給你分發到對應的app中)


當你的應用下的視圖函數特別特別多的時候 你可以建一個views文件夾 里面根據功能的細分再建不同的py文件(******)

在多個app的情況下,我們路由層就不能像之前寫的一樣,而是要寫成類似于先把路由分發給各個app,每個app里面的路由層再進行分發

?

總路由中 一級路由的后面千萬不加$符號

?

?

?我們還需要將各個app中的urls導入并起別名,因為每個app中urls文件的名字相同

?進行app分發之前我們需要先導入include模塊

?

?

?再像這樣進行路由分發

app內的路由層還像之前一樣書寫

?

?

?不過我們的url就不能像之前一樣書寫了,要寫成127.0.0.1:8080/app01/index這樣的形式

無名分組

url(r'^test/([0-9]{4})/', views.test)
路由匹配的時候 會將括號內正則表達式匹配到的內容 當做位置參數傳遞給視圖函數

類似于test(request, num)調用函數

有名分組

url(r'^test/(?P<year>\d+)/', views.test)

?P<year>就是給后面匹配到的數字進行命名


路由匹配的時候 會將括號內正則表達式匹配到的內容 當做關鍵字參數傳遞給視圖函數

test(request,year=2019)

注意:有名分組和無名分組不能混合使用

但是 用同一種分組 可以使用多個

# 無名分組支持多個# url(r'^test/(\d+)/(\d+)/', views.test),# 有名分組支持多個# url(r'^test/(?P<year>\d+)/(?P<xx>\d+)/', views.test),

反向解析

  本質:其實就是給你返回一個能夠返回對應url的地址

  1.先給url和視圖函數對應關系起別名

    url(r'^index/$',views.index,name='kkk')

  2.反向解析

    后端反向解析

      后端可以再任意位置通過reverse反向解析出對應的url

      from django.shortcuts import render,HttpResponse,redirect,reverse

      reverse? 需要先導入
      reverse('kkk')? # 直接通過別名進行解析url地址

無名分組反向解析  

url(r'^index/(\d+)/$',views.index,name='kkk')

后端反向解析
  reverse('kkk',args=(1,))? ? # 后面的數字通常都是數據的id值
前端反向解析
  {% url 'kkk' 1%}? ?# 后面的數字通常都是數據的id值

?

有名分組反向解析

同無名分組反向解析意義的用法

url(r'^index/(?P<year>\d+)/$',views.index,name='kkk')

后端方向解析

  print(reverse('kkk',args=(1,)))? # 推薦你使用上面這種? 減少你的腦容量消耗

  print(reverse('kkk',kwargs={'year':1}))

前端反向解析

  <a href="{% url 'kkk' 1 %}">1</a>? # 推薦你使用上面這種? 減少你的腦容量消耗

  <a href="{% url 'kkk' year=1 %}">1</a>

?

注意:在同一個應用下 別名千萬不能重復!!!

名稱空間(了解)

多個app的起了相同的別名 這個時候用反向解析 并不會自動識別應用前綴
如果想避免這種問題的發生

?

方式1:

  總路由

    url(r'^app01/',include('app01.urls',namespace='app01'))

    url(r'^app02/',include('app02.urls',namespace='app02'))

  后端解析的時候

    reverse('app01:index')

    reverse('app02:index')

  前端解析的時候

    {% url 'app01:index' %}

    {% url 'app02:index' %}

方式2:

  起別名的時候不要沖突即可? 一般情況下在起別名的時候通常建議以應用名作為前綴

  name = 'app01_index'

  name = 'app02_index'

?

偽靜態

靜態網頁:數據是寫死的 萬年不變

偽靜態網頁的設計是為了增加百度等搜索引擎seo查詢力度

所有的搜索引擎其實都是一個巨大的爬蟲程序

網站優化相關 通過偽靜態確實可以提高你的網站被查詢出來的概率
但是再怎么優化也抵不過RMB玩家

比如??https://www.cnblogs.com/Dominic-Ji/articles/10982293.html? 以.html結尾

但是數據是從數據庫中獲取的,并不是寫死的

虛擬環境

一般情況下 我們會給每一個項目 配備該項目所需要的模塊 不需要的一概不裝
虛擬環境 就類似于為每個項目量身定做的解釋器環境


如何創建虛擬環境
每創建一個虛擬環境 就類似于你又下載了一個全新的python解釋器

?

?

?

?

?

?

django版本的區別

django1.X跟django2.X版本區別

  路由層1.X用的是url
  而2.X用的是path

  2.X中的path第一個參數不再是正則表達式,而是寫什么就匹配什么 是精準匹配

  當你使用2.X不習慣的時候 2.X還有一個叫re_path
  2.x中的re_path就是你1.X的url

?

雖然2.X中path不支持正則表達式? 但是它提供了五種默認的轉換器

  1.0版本的url和2.0版本的re_path分組出來的數據都是字符串類型
  默認有五個轉換器,感興趣的自己可以課下去試一下
  str,匹配除了路徑分隔符(/)之外的非空字符串,這是默認的形式
  int,匹配正整數,包含0。
  slug,匹配字母、數字以及橫杠、下劃線組成的字符串。
  uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
  path,匹配任何非空字符串,包含了路徑分隔符(/)(不能用?)

?

  path('index/<int:id>/',index)? # 會將id匹配到的內容自動轉換成整型

?

?

還支持自定義轉換器class FourDigitYearConverter: regex = '[0-9]{4}' def to_python(self, value): return int(value) def to_url(self, value): return '%04d' % value 占四位,不夠用0填滿,超了則就按超了的位數來!register_converter(FourDigitYearConverter, 'yyyy') urlpatterns = [ path('articles/2003/', views.special_case_2003), path('articles/<yyyy:year>/', views.year_archive), ... ]

Django請求生命周期

?

?

?

?

?

?

轉載于:https://www.cnblogs.com/asdaa/p/11536190.html

總結

以上是生活随笔為你收集整理的Django路由层的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。