get传参
一般来说有两种方式:
-
?page=1
这是web中常用的传参方式,在这种传参中page是key,而1为key对应的value,就是键值对传参。get请求构造时,直接将参数以键值对放在data里,然后就会将data中的参数以这样的形似组合起来,如data中,定义了两个参数page以及user:
?page=1&user=1
-
page/1
django获得get的参数
传统的获取键值对的方法
在django针对第一种,我们直接通过字典的get的方法来获得,即request.GET[‘page’]来获得,这时候路由的配置以及view的书写跟get中不含参数是一样的,例:
path(r'page/',views.TestView.as_view())
当我们要测试某一参数有没有给,并返回不存在时的默认值,可以用request.GET.get(‘page’,’’)
从这里可以看出来了request.GET保存的就是get请求中带有的数据的字典
正则方法
-
获得page/1这样的参数
path(r'page/<index>', views.TestView.as_view()), def get(self, request, *args, **kwargs): print({'args':args, 'kwargs':kwargs})
会得到{‘args’: (), ‘kwargs’: {‘index’: ‘1’}}这样的参数
注意index在这里是形参的意思
-
正则获取
django2.0以后就是用path代替url,这个是没有正则功能的,要正则功能则要用re_path,
page/1用如下的路径匹配:
re_path(r'page/(\d+)',views.TestView.as_view())
简单的?page=1可以用一下的方法匹配
re_path(r'?page=(\d+)',views.TestView.as_view())
但是同样的链接,这种正则获得的参数是这样的:
{'args': ('1',), 'kwargs': {}}
同样的我们在e_path中定义形参?使用这样的定义:?P:
re_path(r'page/(?P<index>\d+)',views.Show_Goods.as_view())
输出的内容如下:
{'args': (), 'kwargs': {'index': '1'}}
当使用形参时,除了我们上面定义接受不定参数的*args和**kwargs,还可以直接再request的视图中直接使用形参名,如:
def get(self,request,index):
print(index)