• <input id="oe200"></input>
  • <menu id="oe200"></menu>

    Django之無名分組,有名分組

    時間:2022-01-20 21:33:00 類型:python
    字號:    

      在Django 2.0版本之前,在urls,py文件中,用url設定視圖函數

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

      其中第一個參數是正則匹配,如下代碼,輸入http://127.0.0.1:8000/login,出現的是login頁面,但是輸入login2,出現的還是login頁面,這是因為Django會將匹配成功的返回,不會繼續往下匹配

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

      所以為了避免上面這種情況,可以在第一個參數加上正則表達式

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

      ^號限定開頭,

          $限定結尾,' / '為匹配機制,

               比如第一次輸入:http://127.0.0.1:8000/login,沒有匹配成功,系統會自動加上‘/‘再進行一次匹配

      這樣就可以寫出首頁和尾頁(尾頁是指找不到對應頁面時打開的頁面,俗稱404)

      

    urlpatterns = [
      url(r'^$',views.home), #這是首頁
      url(r'',views.error) #這是尾頁]

      同樣的既然可以進行正則匹配,那么就可以寫更多的正則語法:

    urlpatterns = [
      url(r'^login/[0-9]{4}$',views.login),
    ]

      類似上面寫出的正則,就是login/ 后面隨意加上4位數字都可以訪問login頁面

      同樣的正則還有分組的概念,但是在Django中把分組分為兩種:無名分組和有名分組

      無名分組

    urlpatterns = [
      url(r'^login/([0-9]{4})$',views.login),
    ]

      在普通的正則匹配中加上()就是無名分組,那么這樣有什么意義呢?

      首先在后端的views上,會得到一個分組的參數,以上面代碼為例,那么views.login函數的參數除了request,還需要添加一個參數(名字隨意),進行幾次分組那么就需要多添加幾次參數

      進入view頁面,其中xxx的名字是隨意的,傳進來的分組的數據例如我輸入的網址是:login/222,那么xxx的值為222

      

    def login(request,xxx):    print(xxx)

      有名分組:

      有名分組其實就是在無名的分組的基礎上加上了名字

    urlpatterns = [
      url(r'^login/(?P<year>[0-9]{4})$',views.login),
    ]

      語法為:(?P<名字> 正則表達式),就是在無名分組的括號里面加上了?P<名字>,注意其中P為大寫

      既然有了名字,那么在views頁面就不能給函數傳遞隨意的參數了:

    def login(request,year):    print(year)

      第二個參數year是urls頁面命名的名字:

    如果名字不一樣則會報錯

      這里有一個坑,既然分組有有名分組和無名分組,那么能不能一起使用?

    答:不行,別問,問就是不行

    亚洲色欲色欲在线大片
  • <input id="oe200"></input>
  • <menu id="oe200"></menu>
    <