app/urls.py
""" url.py文件中的這些path地址,稱為url路由,就是url地址。 如何通過url路由,向視圖函數(Function views)傳遞參數? """ from django.urls import path, re_path from urlparams import views urlpatterns = [ # 1. 直接在瀏覽器的url后,使用?和&符號拼接參數,視圖函數應如何接收參數? path('args', views.params_first), # 2. 參數不再以?的形式進行拼接,而是以路徑/a/a/a/的形式傳遞的,視圖函數應如何接收參數? # /(\d+)/(\w+)/就是給視圖函數傳遞的兩個參數。 # 視圖函數想要接收,在函數中必須聲明兩個形參(形參名稱任意設定)來接收這兩個參數。 # re_path(r'^params/(\d+)/(\w+)/$', views.params), re_path(r'^params/(\d{2})/(\w+)/$', views.params), # 將re_path轉化成path()的寫法:71 # 視圖函數接收參數,params1必須聲明兩個形參(形參的名稱必須和路由中指定的參數名稱保持一致)。 # <>是用來匹配參數的。 # <>中的參數是可以指定轉換器,轉換器的作用就是對攔截到的參數進行轉化再傳遞給視圖函數,比如類型的轉化,值的轉化等。 # 默認的轉化器是str path('params1/<str:username>/<int:password>/', views.params1), # 3. path()函數除了上述將參數直接以路徑的形式傳遞給視圖函數,也可以采用如下方法傳遞參數。 # params2()需要設置形參,形參的名稱和字典的鍵保持一致。 path('params2/', views.params2, {'user': '李四', 'pwd': '234'}), # 4. re_path()這種url路由,如何指定參數的名稱。而上面的re_path中,參數的名稱可以任意設定。 # ?P:是指定參數名稱的固定格式。 # <id>、<username>就是形參的名稱,此時視圖函數params3()的形參必須和id、username保持一致。 # <id>\d+ : 表示將\d+匹配到的數字參數,賦值給形參id。 # <username>\w+ :表示將\w+匹配到的字符參數,賦值給形參username。 re_path(r'^params3/(?P<id>\d+)/(?P<username>\w+)/$', views.params3) ]
app/views.py
from django.shortcuts import render from django.http import HttpResponse # Create your views here. def params_first(request): # 針對路由的第一種情況,直接從GET請求中獲取參數。 user_name = request.GET.get('user', '') pass_word = request.GET.get('pwd', '') result = '賬號:{},密碼:{}'.format(user_name, pass_word) return HttpResponse(result) def params(request, name, pwd): print(type(name)) result = 'name={}, pws={}'.format(name, pwd) return HttpResponse(result) def params1(request, username, password): print(type(password)) result = 'name={}, pws={}'.format(username, password) return HttpResponse(result) def params2(request, user, pwd): result = 'name===={}, pws===={}'.format(user, pwd) return HttpResponse(result) def params3(request, id, username): result = 'name===={}, pws===={}'.format(id, username) return HttpResponse(result)