亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Django 路由層URLconf的實(shí)現(xiàn)

 更新時(shí)間:2019年12月30日 10:37:19   作者:liuxu2019  
這篇文章主要介紹了Django 路由層URLconf的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

分組

分組的目的:讓服務(wù)端獲得url中的具體數(shù)據(jù),通過分組,把需要的數(shù)據(jù)按函數(shù)傳參的方式傳遞給服務(wù)器后臺(tái)

1-無名分組

若要從URL 中捕獲一個(gè)值,只需要在它周圍放置一對(duì)圓括號(hào)

# app01/urls.py
from django.urls import path, re_path
from app01 import views


app_name = "app01"
urlpatterns = [

  path("login/", views.login, name="Log"),
  re_path(r"articles/([0-9]{4})/([0-9]){2}/", views.articles),

]

# app01/views.py
def articles(request, year, month ):
  print(year, month)
  return HttpResponse(year+"-"+month)

2-有名分組

在更高級(jí)的用法中,可以使用命名的正則表達(dá)式組來捕獲URL 中的值并以關(guān)鍵字 參數(shù)傳遞給視圖。

在Python 正則表達(dá)式中,命名正則表達(dá)式組的語法是(?P<name>),其中name 是組的名稱,下面是以上URLconf 使用命名組的重寫。

# app01/urls.py
from django.urls import path, re_path
from app01 import views

app_name = "app01"
urlpatterns = [

  path("login/", views.login, name="Log"),
  re_path(r"articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2}/)", views.articles),
]

捕獲的值作為關(guān)鍵字參數(shù)而不是位置參數(shù)傳遞給視圖函數(shù)

# app01/views.py
def articles(request, month, year ):
  print(year, month)
  return HttpResponse(year+"-"+month)

分發(fā)

分發(fā)的目的:解決一個(gè)django項(xiàng)目中因?yàn)榇嬖诙鄠€(gè)應(yīng)用app導(dǎo)致project下面的urls臃腫和分配混亂的問題

分發(fā)的具體操作流程是:

step1:項(xiàng)目文件下的urls.py,使用include()

# project/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
  path('admin/', admin.site.urls),
  path(r"app01/", include("app01.urls")),
]

step2:app下的具體url

# app01/urls.py
from django.urls import path
from app01 import views

urlpatterns = [
  path("login/", views.login),

]

step3:視圖函數(shù)render時(shí)模板路徑前綴

# app01/views.py
from django.shortcuts import render
# Create your views here.

def login(request):

  return render(request, "app01/login.html")

step4:模板

# app01/templates/app01/login.html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>app01_title</title>
</head>
<body>
  <h2>app01_login</h2>
  <hr>
  <form action="" method="post">
    <p>用戶名 <input type="text" name="name"></p>
    <p>密碼 <input type="password" name="pwd"></p>
    <p><input type="submit" value="登錄"></p>
  </form>

</body>
</html>

反向解析

反向解析的目的:解決url硬編碼的問題,即不能寫死一個(gè)url,否則日后修改url,造成的維護(hù)成本巨大

此時(shí)可以給url命名,然后可以在視圖和模板中使用url別名,反向解析出正式的url

反向解析分兩種:模板中解析、視圖中解析

模板中解析 <form action="{% url "Art" 12 %}" method="post">

# app01/urls.py
from django.urls import path
from app01 import views

urlpatterns = [

  path("login/", views.login, name="Log"),
  path("articles/<int:id>/", views.articles, name="Art"),  #有參

]

# app01/templates/app01/login.html
<form action="{% url "Log" %}" method="post">
  <p>用戶名 <input type="text" name="name"></p>
  <p>密碼 <input type="password" name="pwd"></p>
  <p><input type="submit" value="登錄"></p>
</form>

<form action="{% url "Art" 12 %}" method="post">
  <p>用戶名 <input type="text" name="name"></p>
  <p>密碼 <input type="password" name="pwd"></p>
  <p><input type="submit" value="登錄"></p>
</form>

視圖中解析 reverse("Art", args=(id,))

# app01/views.py
from django.shortcuts import render
from django.urls import reverse

# Create your views here.

def login(request):
  
  print(reverse('log'))
  id=10
  print(reverse("Art", args=(id,)))
  
  return render(request, "app01/login.html")

命名空間

命名空間要配合反向解析使用,當(dāng)存在多個(gè)app,url的name沖突時(shí),需要指定該name的命名空間

# project/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
  path('admin/', admin.site.urls),
  path(r"app01/", include("app01.urls", namespace="app01")),
  path(r"app02/", include("app02.urls", namespace="app02")),
]

在django2.x中,app01/url.py需要添加 app_name = "app01"

# app01/urls.py
from django.urls import path
from app01 import views

app_name = "app01"
urlpatterns = [
  path("login/", views.login, name="Log"),

]

# app01/views.py(需要時(shí)設(shè)置)
from django.shortcuts import render
from django.urls import reverse
# Create your views here.

def login(request):
  a = reverse("app01:Log")
  print("app01:", a)
  return render(request, "app01/login.html")

# app01/templates/app01/login.html(需要時(shí)設(shè)置)
<form action="{% url "app01:Log" %}" method="post">
   <p>用戶名 <input type="text" name="name"></p>
   <p>密碼 <input type="password" name="pwd"></p>
   <p><input type="submit" value="登錄"></p>
 </form>

轉(zhuǎn)換器

對(duì)于django2.0版本以后,出現(xiàn)新的path() urlconf,他有兩個(gè)好處:

1:url修改維護(hù)變得簡(jiǎn)單

2:url獲得的參數(shù)的數(shù)據(jù)類型不再是單純的str,在path中可以通過轉(zhuǎn)換器實(shí)現(xiàn)參數(shù)數(shù)據(jù)類型的轉(zhuǎn)換

path()中存在5個(gè)內(nèi)置轉(zhuǎn)化器:

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

使用方法:

step1: app01/urls.py

from django.urls import path, re_path
from app01 import views

app_name = "app01"
urlpatterns = [
  path("login/", views.login, name="Log"),
  # re_path(r"articles/(?P<year>[0-9]{4})/", views.articles),

  path("articles/<int:year>/<int:month>/", views.articles),
]

step2: app01/views.py

def articles(request, year, month):

  print(year, month)
  print(type(year))

  return HttpResponse("ok")

  • <int: year> 相當(dāng)于re_path()中的 (?P[0-9]{4})
  • <> 表示有名分組,year是組名;int表示傳參的數(shù)據(jù)類型是正整數(shù)(但包括0)

自定義轉(zhuǎn)換器

step1: app01/my_converters.py

class YearConverter:  
  
  regex = '[0-9]{4}'  
  
  def to_python(self, value):    
    return int(value)  
  
  def to_url(self, value):    
    return '%04d' % value

step2: app01/urls.py

from django.urls import path, re_path, register_converter
from app01 import views, my_converters

register_converter(my_converters.YearConverter, 'year')
app_name = "app01"
urlpatterns = [

  path("login/", views.login, name="Log"),
  # re_path(r"articles/(?P<year>[0-9]{4})/", views.articles),
  # path("articles/<int:year>/<int:month>/", views.articles),
  
  path("books/<year:y>", views.books),
]

step3: app01/views.py

def books(request, y):

  print(y, type(y))
  return HttpResponse("ok,books")

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python實(shí)現(xiàn)一個(gè)轉(zhuǎn)存純真IP數(shù)據(jù)庫(kù)的腳本分享

    Python實(shí)現(xiàn)一個(gè)轉(zhuǎn)存純真IP數(shù)據(jù)庫(kù)的腳本分享

    工作中我們常需要使用純真IP數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù)做分析,下面這篇文章主要給大家介紹了利用Python如何實(shí)現(xiàn)一個(gè)轉(zhuǎn)存純真IP數(shù)據(jù)庫(kù)的相關(guān)資料,對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • python中Requests請(qǐng)求的安裝與常見用法

    python中Requests請(qǐng)求的安裝與常見用法

    Requests是一常用的http請(qǐng)求庫(kù),它使用python語言編寫,可以方便地發(fā)送http請(qǐng)求,以及方便地處理響應(yīng)結(jié)果,下面這篇文章主要給大家介紹了關(guān)于python中Requests請(qǐng)求的安裝與常見用法的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • python3獲取當(dāng)前文件的上一級(jí)目錄實(shí)例

    python3獲取當(dāng)前文件的上一級(jí)目錄實(shí)例

    下面小編就為大家分享一篇python3獲取當(dāng)前文件的上一級(jí)目錄實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python統(tǒng)計(jì)列表中每個(gè)元素出現(xiàn)次數(shù)的4種實(shí)現(xiàn)

    Python統(tǒng)計(jì)列表中每個(gè)元素出現(xiàn)次數(shù)的4種實(shí)現(xiàn)

    本文主要介紹了Python統(tǒng)計(jì)列表中每個(gè)元素出現(xiàn)次數(shù)的4種實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • python單鏈表實(shí)現(xiàn)代碼實(shí)例

    python單鏈表實(shí)現(xiàn)代碼實(shí)例

    這篇文章主要介紹了python單鏈表實(shí)現(xiàn)代碼,大家參考使用吧
    2013-11-11
  • python 多線程中join()的作用

    python 多線程中join()的作用

    這篇文章主要介紹了python 多線程中join()的作用,通過代碼實(shí)踐來加深對(duì) join()的認(rèn)識(shí),幫助大家更好的理解和學(xué)習(xí)python 多線程,感興趣的朋友可以了解下
    2020-10-10
  • python selenium登錄豆瓣網(wǎng)過程解析

    python selenium登錄豆瓣網(wǎng)過程解析

    這篇文章主要介紹了python selenium登錄豆瓣網(wǎng)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python 字典中取值的兩種方法小結(jié)

    python 字典中取值的兩種方法小結(jié)

    今天小編就為大家分享一篇python 字典中取值的兩種方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • python實(shí)現(xiàn)銀行管理系統(tǒng)

    python實(shí)現(xiàn)銀行管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)銀行管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Python之plt.bar繪制柱狀圖參數(shù)解讀

    Python之plt.bar繪制柱狀圖參數(shù)解讀

    這篇文章主要介紹了Python之plt.bar繪制柱狀圖參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評(píng)論