1. 程式人生 > >python自動化運維學習第十七天--urls

python自動化運維學習第十七天--urls

urls

urls.py檔案是對請求的路由,通過訪問不同路徑進行不同的處理。
如前幾篇文章中寫的urls.py檔案

from django.conf.urls import url
from django.contrib import admin
from demo import views     #匯入demo包下的views模組,後來新增的

urlpatterns = [
    url(r'^admin/', admin.site.urls),      #其中括號內第一個引數為匹配的內容,第二個引數為匹配後執行的方法
    url(r'^login/$', views.
login), #login的請求轉發給views模組內的login函式處理,後來新增的 ]

那麼問題來了,如果要匹配的頁面比較多,有幾十上百,都寫在這個指令碼中會顯得比較亂,不夠簡潔也不夠直觀。這時可以通過匹配一級路徑,跳轉到其他指令碼來完成二級甚至三級路徑的匹配。
下面看優化後的urls.py程式碼

from django.conf.urls import url, include    #添加了一個include項
from django.contrib import admin
from demo import views

urlpatterns = [
    url(
r'^admin/', admin.site.urls), url(r'^login/$', views.login), url(r'^api/', include('demo02.urls')), #首先匹配到api這個一級路徑,然後跳轉到demo02.urls這個模組去繼續匹配二級路徑 ]

先使用命令去建立一個名字為demo02的app
python manage.py startapp demo02
在demo02目錄下新建一個urls.py檔案

from django.conf.urls import url, include
from django.contrib import
admin from demo02 import views #匯入demo02下的views模組 urlpatterns = [ url(r'^list.html', views.list), #匹配二級路徑list.html,跳轉到demo02下的views.py的list方法處理 url(r'^add.html', views.add), #匹配二級路徑add.html,跳轉到demo02下的views.py的add方法處理 url(r'^update.html', views.update), #匹配二級路徑update.html,跳轉到demo02下的views.py的update方法處理 url(r'^delete.html', views.delete), #匹配二級路徑delete.html,跳轉到demo02下的views.py的delete方法處理 ]

demo02下的views.py內容

from django.shortcuts import render,HttpResponse

def list(request):      #處理demo02下的urls.py中的list.html的請求
    return HttpResponse('this list')

def add(request):      #處理demo02下的urls.py中的add.html的請求
    return HttpResponse('this add')

def update(request):   #處理demo02下的urls.py中的update.html的請求
    return HttpResponse('this update')

def delete(request):   #處理demo02下的urls.py中的delete.html的請求
    return HttpResponse('this delete')

然後啟動專案,訪問http://127.0.0.1:8000/api/list.html就會返回一個顯示“this list”字元的頁面,訪問http://127.0.0.1:8000/api/ladd.html同理會顯示“this add”。
整個流程就是當你訪問http://127.0.0.1:8000/api/list.html這個頁面時,專案下的utls.py首先會匹配到api這個一級路徑,然後根據使用的include方法,跳轉到demo02這個app下的urls.py,再次匹配到list.html這個二級路徑,跳轉到該app(demo02)下的views.py檔案的list方法去處理該次請求,最後返回給客戶端一個顯示“this list”的頁面。

如果需要從url中獲取一些引數時,如頁面翻到第幾頁等,這時可以在urls.py檔案中配置正則匹配來獲取該引數,下面看urls.py中的程式碼

urlpatterns = [
    url(r'^blog/$', views.page),
    url(r'^blog/page(?P<num>[0-9]+)/$', views.page),      #括號中的?P<num>[0-9]+就是獲取url中的引數,使用了正則匹配。?P是固定寫法,<num>[0-9]+表示0-9的數字引數賦值給num這個變數,這樣num就拿到了引數值,這個num是字串型別
]

urls.py就拿到了這個引數,並且把它放到num這個變數中。views.py想要接收這個引數,需要在方法中新增一個引數。
注意:urls.py裡拿到引數值的變數num型別為str,想要使用數字需要用int轉換
views.py程式碼

def page(request, num="1"):   #num這個引數來接收urls.py中變數的值,預設是1
    pass