Django路由系統(tǒng)簡述-創(chuàng)新互聯(lián)

在前面的例子里面,我們已經(jīng)了解,Django里面可以通過在Project同名的那個目錄下的urls.py文件里面配置路由,根據(jù)用戶輸入的url,調(diào)用不同的函數(shù)或者類的方法。下面看看具體的一些例子。

創(chuàng)新互聯(lián)堅信:善待客戶,將會成為終身客戶。我們能堅持多年,是因為我們一直可值得信賴。我們從不忽悠初訪客戶,我們用心做好本職工作,不忘初心,方得始終。十多年網(wǎng)站建設(shè)經(jīng)驗創(chuàng)新互聯(lián)是成都老牌網(wǎng)站營銷服務(wù)商,為您提供網(wǎng)站制作、做網(wǎng)站、網(wǎng)站設(shè)計、H5技術(shù)、網(wǎng)站制作、品牌網(wǎng)站制作、小程序設(shè)計服務(wù),給眾多知名企業(yè)提供過好品質(zhì)的建站服務(wù)。

單一的路由對應(yīng)關(guān)系。這種方式最直接,前面已經(jīng)多次出現(xiàn), 可以是fbv或者cbv類型的。

url(r'^login/', views.login)
url(r'^home/', views.Home.as_view()),

基于正則表達式的路由關(guān)系。具體來說,也可以分成兩種:a. url(r'^detail-(\d+).html', views.detail) , 這里出現(xiàn)了一個分組(\d+),因此需要額外的再傳遞一個參數(shù)給detail這個函數(shù),如果多個分組的話,需要按照順序傳遞多個參數(shù)到detail函數(shù)b. url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail), 這里因為指定了nid和uid,因此傳遞參數(shù)的時候也需要指明具體是傳遞給誰的。c. 上面兩種情況都可以通過萬能參數(shù)實現(xiàn) def detail(request, *args,**kwargs)

實戰(zhàn)模板:

url(r'^detail-(\d+)-(\d+).html', views.detail),
def func(request, nid, uid):
pass
def func(request, *args):
args = (2,9)
def func(request, *args, **kwargs):
args = (2,9)
   
#-----------------------------我是分割線------------------------------------ 
url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail)
def func(request, nid, uid):
pass
def funct(request, **kwargs):
kwargs = {'nid': 1, 'uid': 3}
def func(request, *args, **kwargs):
args = (2,9)

給路由的映射設(shè)置名稱,這樣更方便調(diào)用。reverse方法可以通過name倒過來找url的路徑

url.py

url(r'^asdfasdfasdf/', views.index, name='i1'),
url(r'^yug/(\d+)/(\d+)/', views.index, name='i2'),
url(r'^buy/(?P<pid>\d+)/(?P<nid>\d+)/', views.index, name='i3'),

view.py

def func(request, *args, **kwargs):
    from django.urls import reverse
    url1 = reverse('i1')                              # asdfasdfasdf/
    url2 = reverse('i2', args=(1,2,))                 # yug/1/2/
    url3 = reverse('i3', kwargs={'pid': 1, "nid": 9}) # buy/1/9/

xxx.html

{% url "i1" %}               # asdfasdfasdf/
{% url "i2" 1 2 %}           # yug/1/2/
{% url "i3" pid=1 nid=9 %}   # buy/1/9/

多級app目錄進行分類

如果存在多個app目錄,每個app目錄下面都可能存在同名的函數(shù)或者url,那么這種多級的路由方式,可以通過在主url文件中配置include指向各app目錄下的子url文件,然后在app各自的目錄下,再配置自己的url文件。

比如:

Django 路由系統(tǒng)簡述

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^cmdb/', include("app01.urls")),
    url(r'^monitor/', include("app02.urls")),
]

Django 路由系統(tǒng)簡述

url.py

urlpatterns = [
    url(r'^login/', views.login),
    url(r'^index/', views.index),
    url(r'^user_info/', views.user_info),
    url(r'^userdetail-(?P<nid>\d+)/', views.user_detail),
    url(r'^userdel-(?P<nid>\d+)/', views.user_del),
    url(r'^useredit-(?P<nid>\d+)/', views.user_edit),
    url(r'^orm/', views.orm),
]

views.py

def user_info(request):
    if request.method == "GET":
        user_list = models.UserInfo.objects.all()
        group_list = models.UserGroup.objects.all()
        return render(request, 'user_info.html', {'user_list': user_list, "group_list": group_list})
    elif request.method == 'POST':
        u = request.POST.get('user')
        p = request.POST.get('pwd')
        models.UserInfo.objects.create(username=u,password=p)
        return redirect('/cmdb/user_info/')

Django 路由系統(tǒng)簡述

url.py

urlpatterns = [
    url(r'^login/', views.login),
]

view.py

def login(request):
    return HttpResponse('APP02,login')

訪問不同app下的效果

Django 路由系統(tǒng)簡述

Django 路由系統(tǒng)簡述

Url里面還可以設(shè)置默認值,比如說我們可以定義一個字典

url(r'^index/', views.index, {'name': 'root'}),

在index這個函數(shù)里面,我們就可以直接調(diào)用這個默認值

def index(request,name):
print(name)
return HttpResponse('OK')

最后一個是命名空間,這個和前面的多級App分類剛好是反過來的。

比如,有兩個不同的Url都指向了同一個App

urls.py

/admin/    include('app01.urls',namespace='m1')
/crm/      include('app01.urls',namespace='m2')

app01.urls

/index/    name = 'n1'

函數(shù)里面生成url的話,需要指定一條明確的路徑

reverser('m1:n1')

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

新聞標題:Django路由系統(tǒng)簡述-創(chuàng)新互聯(lián)
URL地址:http://muchs.cn/article28/djgijp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站網(wǎng)站改版、電子商務(wù)、外貿(mào)建站、網(wǎng)站維護、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)