Django 第二課 2.【urlpatterns】

urlpatterns 在url文件中是一個url映射列表。在1.8之後的django版本中可直接爲列表形式或者也能夠用patterns函數生成。在1.7及之前的版本中則是由patterns函數生成。系統會自動遍歷url文件中的urlpatterns列表而後進行對應的處理函數查找。當url有重複的狀況則以找到的第一個爲準。html

 

先說說Django怎麼處理請求:

  • 一旦生成url頁面請求,請求傳遞到urls.py;
  • Django去urlpatterns中匹配連接(Django會在匹配到的第一個就停下來);
  • 一旦匹配成功,就會去執行,path後面的方法,Django便會給出相應的view頁面(該頁面能夠爲一個Python的函數,或者基於view(Django內置的)的類),也就是用戶看到的頁面;
  • 若匹配失敗,則出現錯誤的頁面。

 

編寫urlpatterns

1.views中的簡單函數
#urls.py
    from app import views #這裏的app是你本身的應用的名字
    from django.urls import path
    urlpatterns = [
                path('index/', views.index, name='index'),
    ]

 

該方法對應view.py中的函數爲:django

#views.py
def index(request):
    ...
    return render(request,'index.html')

 

2.從views中繼承的類
#urls.py
    from app.views import LoginView
    from django.urls import path
    urlpatterns = [
                path('login/', LoginView.as_view(), name='login'),
    ] 

 

該方法對應的view.py中爲:app

#views.py
class LoginView(View):
    #請求爲get時
    def get(self,request):
        ...
        return render(request, 'login.html')
    #請求爲post時
    def post(self,request):
        ...
        return render(request,'login.html')

 

當你從其餘地方好比你的應用中也新建了一個文件叫urls.py,這是能夠用第三種方法:函數

3.導入其餘的URL文件(適用於urls.py文件不止一個時)post

 #urls.py(系統默認的)
    from django.urls import include, path
    urlpatterns = [
        path('login/', include('app.urls'))#假設本身新建的urls在app(應用中)
    ]

 

再說urlpatterns   

若以爲上述方法依然不夠逼格,能夠試試正則形式的urlpatterns,具體用法爲網站

導入包時由url

from django.urls import path

更改成spa

from django.urls import re_path

相應的urlpatterns構造也變爲code

urlpatterns = [
                re_path(r'^articles/(?P<year>[0-9]{4})/$', view.year, name='article'),
                re_path(r'^blog/(page-(\d+)/)?$',blog_articles),
     ]   

這樣子能夠很方便的匹配到具體某一年的文章,而不用對「每年」都寫一個path,這樣子能夠極大的減輕工做量。htm

 

還有一種方法

#urls.py
    from app.views import LoginView
    from django.conf.urls import url  #注意這裏
    urlpatterns = [
                url(r'^login/$', LoginView.as_view(), name='login'), #還有這裏
    ] 

 

總結:

path方法適用於頁面較少的網站,re_path能夠利用正則表達的優點適用於較多的頁面的網站

匹配失敗出現錯誤頁面

  • handler400
  • handler403
  • handler404
  • handler500

如有興趣能夠上官網看一下

當你的項目上線時則須要對這些錯誤進行本身的定義,總不能人家去訪問你的頁面了,404仍是django的錯誤頁面吧。。。

本身定義時則需進行全局定義

即不能包含在上述urlpatterns中

#urls.py
handler404 = 'app.views.page_not_found'
相關文章
相關標籤/搜索