国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

圖書館門戶網(wǎng)站建設的意義重慶森林講的什么內(nèi)容

圖書館門戶網(wǎng)站建設的意義,重慶森林講的什么內(nèi)容,wordpress默認后臺密碼,廈門建設局網(wǎng)站路由系統(tǒng) 1.Django1中的路由1.1 普通形式1.2 分組1.2.1 無名分組1.2.2 有名分組 2. Django2版本2.1 傳統(tǒng)的路由2.2 正則表達式路由 3. 路由分發(fā)3.1 include(一般使用此方式做路由分發(fā))3.2 手動分發(fā) 4. name別名及使用name的反向URL生成4.1 一般情況下的別名使用及反向生成4.2 分…

路由系統(tǒng)

    • 1.Django1中的路由
      • 1.1 普通形式
      • 1.2 分組
        • 1.2.1 無名分組
        • 1.2.2 有名分組
    • 2. Django2+版本
      • 2.1 傳統(tǒng)的路由
      • 2.2 正則表達式路由
    • 3. 路由分發(fā)
      • 3.1 include(一般使用此方式做路由分發(fā))
      • 3.2 手動分發(fā)
    • 4. name別名及使用name的反向URL生成
      • 4.1 一般情況下的別名使用及反向生成
      • 4.2 分組中方向解析URL
    • 5. 名稱空間

1.Django1中的路由

1.1 普通形式

在Django1的版本中,普通路由url進行匹配,其格式如下:

urlpatterns = [url(regex, view, kwargs=None, name=None),
]
  1. url的regex參數(shù),即第一個參數(shù)為正則表達式
  2. view參數(shù)通常為視圖函數(shù),用來處理業(yè)務邏輯
  3. kwargs:接收傳遞給視圖函數(shù)的參數(shù)
  4. name:為regex參數(shù)地址的別名,在地址過長時可用別名反向解析

示例:

urlpatterns = [url(r'^admin/', admin.site.urls),url(r'^index$',views.index)
]

PS:需要注意

  1. 正則表達式不需要添加一個前導的反斜杠,因為每個URL都有。例如,應該是^index而不是 ^/index
  2. 每個正則表達式前面的’r’ 是可選的但是建議加上
  3. 如果我們想匹配的路徑就只是index/,那么正則表達式應該有開始符與結束符, 如 ^index/$。這樣邏輯才算嚴謹
  4. 若正則為r'index/'在瀏覽器輸入:http://127.0.0.1:8001/index/,Django會拿著路徑部分index/去路由表中自上而下匹配正則表達式,一旦匹配成功,則立即執(zhí)行其后的視圖函數(shù),不會繼續(xù)往下匹配,此處匹配成功的正則表達式是 r'^index/$'。
  5. 無論是否書寫最后的/,都可以匹配成功,是因為配置中APPEND_SLASH默認為True且并不會出現(xiàn)在配置文件中,若想精確匹配最后的/則應該去settings文件中將APPEND_SLASH設置為False。

1.2 分組

分組實際上可以理解為get請求的第二種方式:

  1. get請求的第一種方式:
    http://127.0.0.1:8000/test/?a=1&b=2
  2. get請求的第二種方式:
    http://127.0.0.1:8000/test/123/11
1.2.1 無名分組

無名分組實際上是re的分組寫法,即把正則中小括號里的匹配到的內(nèi)容以位置參數(shù)的形式傳遞給視圖函數(shù),如下:

urls.py文件
from django.contrib import admin
from django.conf.urls import url
from app01 import viewsurlpatterns = [# 下述正則表達式會匹配url地址的路徑部分為:article/數(shù)字/,匹配成功的分組部分會以位置參數(shù)的形式傳給視圖函數(shù),有幾個分組就傳幾個位置參數(shù)url(r'^article/(\d+)/$',views.article), 
]
views.py文件
from django.shortcuts import render
from django.shortcuts import HttpResponse# 需要額外增加一個形參用于接收傳遞過來的分組數(shù)據(jù)
def article(request,article_id):return HttpResponse('id為 %s 的文章內(nèi)容...' %article_id)
測試:
python manage.py runserver 8001 # 在瀏覽器輸入:http://127.0.0.1:8001/article/3/ 會看到: id為 3 的文章內(nèi)容...
1.2.2 有名分組

當我們對分組命名后,就會按照key=value的關鍵字參數(shù)形式為視圖函數(shù)傳參,示例如下:
urls.py

from django.contrib import admin
from django.conf.urls import url
from app01 import viewsurlpatterns = [url('admin/', admin.site.urls),# 該正則會匹配url地址的路徑部分為:article/數(shù)字/,匹配成功的分組部分會以關鍵字參數(shù)(article_id=匹配成功的數(shù)字)的形式傳給視圖函數(shù),有幾個有名分組就會傳幾個關鍵字參數(shù),需要強調一點是:視圖函數(shù)得到的值均為字符串類型url(r'^article/(?P<article_id>\d+)/$',views.article), 
]

views.py

from django.shortcuts import render
from django.shortcuts import HttpResponse# 需要額外增加一個形參,形參名必須為article_id
def article(request,article_id):return HttpResponse('id為 %s 的文章內(nèi)容...' %article_id)

測試:

python manage.py runserver 8001 # 在瀏覽器輸入:http://127.0.0.1:8001/article/3/ 會看到: id為 3 的文章內(nèi)容...

普通分組和命名分組都是為了獲取路徑中的參數(shù),并傳遞給視圖函數(shù),區(qū)別在于普通分組是以位置參數(shù)的形式傳遞,命名分組是以關鍵字參數(shù)的形式傳遞。但請注意,有名分組和無名分組不要同時使用。

2. Django2+版本

2.1 傳統(tǒng)的路由

在Django2以上的版本中,默認的路由通過path精準匹配來識別,避免了正則可能出現(xiàn)的一些匹配的問題。

格式如下:


urlpatterns = [path('admin/', admin.site.urls),path('',views.show_user_info),path('show/', views.show_user_info),path('del/', views.del_user_info),path('update/', views.update_user_info),path('insert/', views.insert_user_info)
]

其用法同url并無太大區(qū)別,path的第一個參數(shù)是精確匹配。

2.2 正則表達式路由

burpatterns = [re_path(r'users/(?<xxid>\w+-\d+)/',views.users),
]

Django2+版本的re_path的用法同Django1的url完全相同,不做過多描述。

3. 路由分發(fā)

當功能較多時,都寫在一個urls文件中顯然并不合適,可以使用路由分發(fā)將功能拆分帶不同的app中。

3.1 include(一般使用此方式做路由分發(fā))

include('app命字.url模塊名')

  1. 模塊app命字/url模塊名.py 文件件里必須有urlpatterns 列表
  2. 使用前需要使用 from django.conf.urls import include 導入此函數(shù)

示例:
djangoproject1/urls.py

from django.urls import path,include
urlpatterns = {path('api/', include('apps.api.urls')),path('web/', include('apps.api.urls'))
}

apps/api/urls.py

from django.urls import path
from apps.api import viewsurlpatterns = {# api/auth/path('auth/',views.auth),# api/login/path('login/',views.login)
}

path本身支持五種轉換器。

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

例如:

  path('articles/<int:year>/', views.year_archive), # <int:year>相當于一個有名分組,其中int是django提供的轉換器,相當于正則表達式,專門用于匹配數(shù)字類型,而year則是我們?yōu)橛忻纸M命的名,并且int會將匹配成功的結果轉換成整型后按照格式(year=整型值)傳給函數(shù)year_archive

但是當本身條件較為復雜時,五種轉換器可能并不能實現(xiàn)要求。針對這一系列復雜的需要,我們可以定義自己的轉化器。轉化器是一個類或接口,它的要求有三點:

  • regex 類屬性,字符串類型

  • to_python(self, value) 方法,value是由類屬性 regex 所匹配到的字符串,返回具體的Python變量值,以供Django傳遞到對應的視圖函數(shù)中。

  • to_url(self, value) 方法,和 to_python 相反,value是一個具體的Python變量值,返回其字符串,通常用于url反向引用。

示例如下:

在app01下新建文件path_ converters.py,文件名可以隨意命名

class MonthConverter:regex='\d{2}' # 屬性名必須為regexdef to_python(self, value):print('===>to_python run')return int(value)def to_url(self, value):print('===>to_url run')return value # 匹配的regex是兩個數(shù)字,返回的結果也必須是兩個數(shù)字

在urls.py中,使用register_converter 將其注冊到URL配置中:

from django.urls import path,register_converter
from app01.path_converts import MonthConverterregister_converter(MonthConverter,'mon')from app01 import viewsurlpatterns = [path('articles/<int:year>/<mon:month>/<slug:other>/', views.article_detail, name='aaa'),]

views.py中的視圖函數(shù)article_detail

from django.shortcuts import render,HttpResponse,reversedef article_detail(request,year,month,other):print(year,type(year))print(month,type(month))print(other,type(other))print(reverse('aaa',args=(1988,12,'hello'))) # 反向解析結果/articles/1988/12/hello/return HttpResponse('xxxx')

測試

# 1、在瀏覽器輸入http://127.0.0.1:8000/articles/2009/12/hello/,path會成功匹配出參數(shù)year=2009,month=12,other='hello'傳遞給函數(shù)article_detail
# 2、在瀏覽器輸入http://127.0.0.1:8000/articles/2009/123/hello/,path會匹配失敗,因為我們自定義的轉換器mon只匹配兩位數(shù)字,而對應位置的123超過了2位

3.2 手動分發(fā)


path('user/', ([path('add/', views.login),path('delete/', views.login),   # /user/delete/path('edit/', views.login),path('list/', views.login),], None, None)),

純粹幫助提取功能的URL,防止重復編寫。

4. name別名及使用name的反向URL生成

4.1 一般情況下的別名使用及反向生成

別名的使用

from django.urls import path
from app01 import views
urlpatterns = [path('login/', views.login, name="v1"),path('auth/', views.auth, name="v2"),
]

視圖函數(shù)中反向生成URL

from django.urls import reverse
url = reverse("v2")   # /auth/
url = reverse("v1")   # /login/

HTML模版中反向生成

<a href="{% url 'v1' %}">添加</a>
<a href="{% url 'v2' %}">添加</a>

4.2 分組中方向解析URL

無名分組反向解析
url(r'^v1/v2/v3/home/(\d+)/(\d+)/$', views.home, name='home')
# 后端解析
res=reverse('home', args=(123, 11)) # /v1/v2/v3/home/1
print(res)# 前端解析
<a href="{% url 'home' 1 123 %}">點我看美女</a>
有名分組反向解析
url(r'^v1/v2/v3/home/(?P<year>\d+)/(?P<mon>\d+)/$', views.home, name='home')
# 后端解析
res=reverse('home', args=(123, 11)) # /v1/v2/v3/home/1
res=reverse('home', kwargs={'year':123, 'mon':1}) # /v1/v2/v3/home/1
print(res)# 前端解析
<a href="{% url 'home' year=1 mon=123 %}">點我看美女</a>

5. 名稱空間

避免name重復可將重名name分別放入不同的namespace

  • 主路由
    	from django.urls import path, re_path, include# 很多功能,很多URL
    urlpatterns = [path('api/', include("apps.api.urls",namespace='x1')),path('web/', include("apps.web.urls",namespace='x2')),	
    ]
    
  • api/urls.py
    from django.urls import path, re_path
    from . import views
    # 很多功能,很多URL
    urlpatterns = [path('login/', views.login,name="login"),path('auth/', views.auth, name='auth'),
    ]
    
  • web/urls.py
    from django.urls import path, re_path
    from . import views
    # 很多功能,很多URL
    urlpatterns = [path('home/', views.home,name='home'),path('order/', views.order,name='order'),path('auth/', views.order, name='auth'),
    ]
    

反向生成

from django.urls import reverse
url = reverse("x1:login")    # /api/login/
url = reverse("x1:order")    # /web/login/url = reverse("x1:auth")    # /api/login/
url = reverse("x2:auth")    # /web/login/
http://aloenet.com.cn/news/42931.html

相關文章:

  • 網(wǎng)站怎么做訪問日志搜索指數(shù)查詢平臺
  • 濟南網(wǎng)站外包友鏈查詢站長工具
  • 武漢大型網(wǎng)站建設哪里有學市場營銷培訓班
  • 趙縣網(wǎng)站建設公司seo jsbapp9
  • 找個做網(wǎng)站的人培訓機構還能開嗎
  • 杭州微信網(wǎng)站建設企業(yè)網(wǎng)站的搜索引擎推廣與優(yōu)化
  • 石家莊市高新區(qū)建設局網(wǎng)站百度競價推廣后臺
  • 都有哪些電商平臺優(yōu)化seo軟件
  • 攝影網(wǎng)站的模板會計培訓機構
  • 美食網(wǎng)站開發(fā)方案百度搜索結果優(yōu)化
  • 專業(yè)的網(wǎng)站建設公司免費平臺
  • 做當?shù)亻T戶網(wǎng)站多少錢app推廣方案范例
  • 一個人做網(wǎng)站好做嗎推廣效果最好的平臺
  • 網(wǎng)站icp備案流程現(xiàn)在比較好的營銷平臺
  • 企業(yè)加盟網(wǎng)站建設北京seo營銷培訓
  • 個人網(wǎng)站建設詳細教程百度seo關鍵詞優(yōu)化方案
  • 安陽網(wǎng)站如何做優(yōu)化營銷推廣公司案例
  • 動態(tài)網(wǎng)站開發(fā)的集成網(wǎng)站網(wǎng)絡營銷是做什么的
  • 社群電商平臺排名搜索引擎優(yōu)化的內(nèi)部優(yōu)化
  • 公司頁面設計圖片寧波seo網(wǎng)絡推廣咨詢價格
  • wordpress 網(wǎng)站備案號搜索引擎營銷的主要方法包括
  • 黨務網(wǎng)站建設總體要求東莞海外網(wǎng)絡推廣
  • 平面設計資源網(wǎng)站微信搜索seo優(yōu)化
  • 哈爾濱暫?,F(xiàn)場業(yè)務內(nèi)蒙古seo
  • 手機網(wǎng)站建設服務電話軟文案例200字
  • 企業(yè)網(wǎng)站開發(fā)的目的seo關鍵詞排名系統(tǒng)
  • 網(wǎng)頁個人信息頁面seo專業(yè)技術培訓
  • 四川德行天下建設工程有限公司網(wǎng)站河北網(wǎng)站建設案例
  • 怎樣做原創(chuàng)短視頻網(wǎng)站百度網(wǎng)址大全簡單版
  • 鏈家在線網(wǎng)站是哪個公司做的代運營哪家比較可靠