获取url地址栏的值
我们经常会看到,在我们常见的网址后面带有一些参数,比如:https://blog.youkuaiyun.com/weixin_41996673/article/details/84800733
我们把这个网址拆分成两部分,https://blog.youkuaiyun.com/ 和 weixin_41996673/article/details/84800733,前半部分就是我们经常访问的网址,后面的就是网页的参数今天我们就讲述,如何在后端获取url的参数
首先,我们先模拟一下url匹配的过程:
1)假设,我们请求一个网页:http://127.0.0.1:8000/test1/ ,拿到url请求后将获取到的网址去除掉域名和参数部分,并将最前面的/去除后,只剩下如下部分与正则匹配
test1/
2)打开booktest/urls.py文件,定义与这个地址匹配的url如下:
url(r'^test\d+/$', views.show_num), # 获取url参数
3)在booktest/views.py中创建视图show_num
def show_num(request):
'''获取url参数'''
return HttpResponse('show_num')
4)启动服务器,输入上面的网址,浏览器中效果如下图
接下来我们在匹配过程中从url中捕获参数,每个捕获的参数都作为一个普通的python字符串传递给视图
获取值需要在正则表达式中使用小括号,分为两种方式:
- 位置参数
- 关键字参数
注意:两种参数的方式不要混合使用,在一个正则表达式中只能使用一种参数方式
方式一:位置参数
直接使用小括号,通过位置参数传递给视图
1)为了提取参数,修改上面的正则表达式如下:
url(r'^test(\d+)/$', views.show_num), # 获取url参数
2)修改视图show_arg如下:
def show_num(request, num):
'''获取url参数'''
return HttpResponse('捕获到的参数为:%s' % num)
3)刷新浏览器页面,效果如下图:
修改url地址栏中的参数后刷新:
方式二:关键字参数
在正则表达式部分为组命名
1)修改正则表达式如下:
其中?P部分表示为这个参数定义的名称为id,可以是其它名称,起名做到见名知意
url(r'^test(?P<num>\d+)/$', views.show_num), # 获取url参数
2)修改视图show_num如下:
注意:视图show_num此时必须要有一个参数名为num,否则就会报错
def show_num(request, num):
'''获取url参数'''
return HttpResponse('捕获到的参数为:%s' % num)
3)刷新浏览器页面,效果如下图
错误情况:如果在booktest/views.py中传的参数名不是自己命名的关键字名字,则会出现如下错误:
解决方式:将booktest/views.py中传入的参数,改为urls.py中命名的关键字参数的名字
url(r'^test(?P<num>\d+)/$', views.show_num), # 获取url参数
def show_num(request, num):
'''获取url参数'''
return HttpResponse('捕获到的参数为:%s' % num)