Django傳參


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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM