1、直接在浏览器的url后,使用?和&符号拼接参数,视图函数应如何接收参数?
path('args/', views.params_first),
接收方式:
其中的’user’和’pwd’是可以随意定义的,但是要注意数量上的对应
def params_first(request):
user_name = request.GET.get('user', '')
pass_word = request.GET.get('pwd', '')
result = '账号:{},密码:{}'.format(user_name, pass_word)
return HttpResponse(result)
2、参数不在以?的形式进行拼接,而是以路径(/a/a/a)的形式传递的,视图函数应如何接收参数?
# /(\d+)/(\w+)/就是给视图函数传递的两个参数。
# 视图函数想要接收,在函数中必须声明两个形参(形参的名称可以任意设定)来接收这两个参数。
# re_path(r'^params/(\d+)/(\w+)/$', views.params),
# \d{2}:表示匹配两位数字
re_path(r'^params/(\d{2})/(\w+)/$', views.params),
# 将re_path转化成path()的写法:
# 视图函数接收参数,params1必须接收两个形参(形参的名称必须和路由中指定的参数名称保持一致)
# <>:是用来匹配参数的。
# <>中的参数是可以指定转换器,转换器的作用就是对拦截到的参数进行转化再传递给视图函数,比如类型的转化,值的转化等。
# 默认转化器是str
path('params1/<str:username>/<int:password>', views.params1),
接收方式:
def params(request, name, pwd):
result = 'name={}, pwd={}'.format(name, pwd)
return HttpResponse(result)
def params1(request, username, username):
# 此方法中的变量(username, username)必须要和urls.py文件中定义的名字一样
print(type(password))
result = 'name={}, pwd={}'.format(username, password)
return HttpResponse(result)
3、path()函数除了上述将参数直接以路径的形式传递给视图函数,也可以采用如下方法传递参数。
#params2()需要设置形参,形参的名称和字典的键保持一致。
path('params2/', views.params2, {'user': '张三', 'pwd': '5423'}),
接收方式:
def params2(request, user, pwd):
result = 'name==={}, pwd==={}'.format(user, pwd)
return HttpResponse(result)
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)
接收方式:
def params3(request, id, username):
print('++++++', request)
result = 'id={}, name={}'.format(id, username)
return HttpResponse(result)