久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Django 系列篇(五):路由篇(中)

 AirPython 2021-10-28

系列導(dǎo)讀

01. Django 系列篇(一):Hello World,!

02. Django 系列篇(二):配置篇(上)

03. Django 系列篇(三):配置篇(下)

04. Django 系列篇(四):路由篇(上)

1. 路由變量

上面 Django 定義的路由只能代表一個頁面,為了使路由指向多個不同的頁面,,可以在路由中定義變量

變量類型有:整形,、字符串、slug,、uuid  4 種

其中:

1,、字符串:匹配任何非空字符串,但不包含斜杠,,默認(rèn)使用字符串類型

2,、整形:匹配任何非負數(shù)

3、slug:匹配 ASCII 字符以及連接線和下劃線,,可理解為注釋,、后綴或附屬等概念

4,、uuid:匹配一個 uuid 格式的對象,為了防止路由沖突,,所有字母必須小寫,,然后用 連接起來,比如:0755-2323-1111-abcd-3f3g

以匹配年,、月,、日的視圖為列

首先,在 App 的路由集合下新增一條路由信息

# urls.py(App)

# 指向日期視圖函數(shù)
# year:字符串
# month:整形
# day:slug類型
path('<year>/<int:month>/<slug:day>', views.ymd_with_params),

其中,,使用變量符號 <> 為路由設(shè)置變量,,: 之前代表變量類型,: 之后代表變量名,;如果沒有指定變量類型,,默認(rèn)為字符串類型

然后,在 App 下的 view.py 文件中編寫路由定義的視圖函數(shù)

視圖函數(shù)中包含 4 個參數(shù),,其中第 1 個參數(shù)為:request,,其他 3 個參數(shù)為:路由信息包含的 3 個變量

需要注意的是,視圖函數(shù)的參數(shù)必須和路由信息包含的變量一一對應(yīng),,否則會拋出異常

# views.py(App)

def ymd_with_params(request, year, month, day):
    """
    日期視圖函數(shù)
    :param request:
    :return:
    """

    result = str(year) + '/' + str(month) + "/" + str(day)
    return HttpResponse(result)

最后運行項目,,在瀏覽器下輸入路由地址,比如:http://127.0.0.1:8000/2020/04/20

2. 額外變量

除了在路由地址中設(shè)置變量外,,還可以為 path 函數(shù)追加一個變量

需要注意的是,,變量必須以字典的形式表示,參數(shù)值不限制數(shù)據(jù)格式,,可以是實體對象,,也可以是基本數(shù)據(jù)類型

# urls.py(App)

# 新建一個路由地址airpython
# 指向視圖函數(shù)with_extra_params
# 并帶有參數(shù),參數(shù)通過字典定義
path('airpython', views.with_extra_params, {'extra_param''AirPython'}),

然后,,在視圖函數(shù) with_extra_params() 中來使用這個參數(shù)

# views.py(App)

def with_extra_params(request, extra_param):
    """
    帶額外的參數(shù)
    :param request:
    :param extra_param:
    :return:
    """

    return HttpResponse('Welcome to attention ' + extra_param)

3. 正則表達式

正則表達式可以限制路由地址中的變量取值范圍,,對路由變量進行截取與判斷,使得路由匹配更加地精確合理

路由正則表達式使用函數(shù) re_path 來定義,,以小括號 ( ) 為一個部分單位,,每個小括號以 ?P 開頭,加入正則表達式,,最后通過斜杠 / 隔開即可

上面的路由地址可以通過正則表達式改寫為:

# 路由正則表達式
# 函數(shù):re_path(路由地址,視圖函數(shù))
# 路由地址:year,、month、day為3個參數(shù)
re_path('(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2}).html',views.ymd_with_params1)

其中,,用 <> 包住的 year,、month、day 為 3 個變量

接著定義視圖函數(shù),,運行項目,,就可以通過地址訪問到視圖函數(shù)渲染的內(nèi)容,。

def ymd_with_params1(request,year, month, day):
    """
    日期視圖函數(shù)(正則表達式)
    :param request:
    :param year:
    :param month:
    :param day:
    :return:
    """

    result = str(year) + '/' + str(month) + "/" + str(day)
    return HttpResponse(result)

4. 命名空間

隨著網(wǎng)頁的數(shù)目增加,維護會有一定難度,,因此,,Django 可以為每一條路由設(shè)置命名空間,方便我們更好地管理網(wǎng)站

通過查看源碼,,發(fā)現(xiàn)路由函數(shù) include() 有兩個參數(shù),,分別是:arg、namespace,,其中 namespace 代表路由的命名空間,,為可選參數(shù);arg 參數(shù)類型為字符串或元組(長度為:2 ),,作用是指向項目某一個 App 的 urls.py 文件

需要注意的是:

1,、如果路由函數(shù)不存在命名空間,arg 的數(shù)據(jù)格式是字符串,,比如:first_app.urls,,指向 first_app 這個 App 的 urls.py 路由文件

2、如果路由函數(shù)命名空間存在,,arg 的數(shù)據(jù)格式一定要設(shè)置為長度為 2 的元組,,比如:('first_app.urls','first_app'),其中第一個參數(shù)為目標(biāo) App 的 urls.py 文件,,第二個參數(shù)一般設(shè)置為 App 的名稱 

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    # 指向admin后臺系統(tǒng)的路由文件
    path('admin/', admin.site.urls),

    # 指向first_app的路由文件:urls.py
    # namespace:設(shè)置路由的命令空間
    path('', include(('first_app.urls''first_app'), namespace='first_app')),

    # 指向本App的路由文件:urls.py
    path('second/', include(('second_app.urls''second_app'), namespace='second_app')),
]

5. 路由名稱

在 Django 中,路由名稱是對一個路由進行命名,,作用是在視圖,、模塊里使用路由命名生成路由地址,在后期路由地址發(fā)生變更的時候,,方便維護和更新

路由定義列表中,,可以為函數(shù) path() re_path() name 屬性指定一個值,相當(dāng)于給路由指定了名稱

urlpatterns = [
    # 指向視圖函數(shù)index
    # 添加路由name屬性
    path('', views.indexname='index'),
]

不同 App 中的路由命令可以重復(fù)使用,,但是在同一個 App 內(nèi),,最好保證路由名稱的唯一性。

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多