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