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)

 

posted @ 2018-11-22 17:48  陈桑啊丶  阅读(1449)  评论(0编辑  收藏  举报