好嘞,我们继续Django的学习,继续我们mvt里的views视图的学习,今天我们主要的内容是学习如何通过url进行传值。
需求: 我们想获取id为 1234567的文章的具体内容,最终能通过url http://127.0.0.1:8000/detail/1234567获取。
上述需求是不是很常见的需求?没错,我们在各类站点里都会有类似的需求的。那我们该如何去识别url解析获取我们的数呢? 我们首先去解析下上述url里都是什么意思。
上述的url的意思是,需要服务器上的detail视图来接收用户请求,并返回id为1234567文章的内容。
好嘞,明白了url的含义,那我们开始建自己的视图吧,然后在视图里获取id,因为我们现在没法查询数据库,那么我们的文章内容直接返回id即可。
我们继续在昨天的app里操作吧,直接添加视图即可。
然后我们再访问下看看效果
但是我们加上参数后
Django在处理的我们的url的时候,把detail/1234567当作一个完整的视图了,但是我们只定义了detail视图,没有定义detail/1234567视图,所以报错了,那该怎么做呢?
很明显,我们在url的路由设置的时候需要指出,哪些是视图,哪些是参数,然后才能正常获取。因此其urls.py里的设置为下面的样子:
即在设置url的时候需要指出哪些是视图,哪些是参数,参数必须放在尖括号<>里。然后我们还需要在视图里获取该参数的值,那么视图实现也要修改下:
在detail方法里就可以使用detailid这个值了,我们这里直接返回!
这里一定要注意:
修改完后运行下看看效果:
看看,可以了吧,随着这个detialid的变化,我们获取的值是变化的。
那么我们修改下视图里的实现,把第二个参数detailid改个名字,例如:
再看看运行结果:
好嘞,我们现在再多传递几个参数吧,代码如下:
视图修改如下:
看看运行效果
那么后续我们就可以根据我们的需要,去传递我们需要的多个参数了!
默认url传递的参数都是字符串的,如果我们想传递指定类型的数据,那么还需要做一些限定。例如我们限定第两个参数必须是int类型的。那么url路由设置这里就需要改动了:
当我们传递的参数不是int类型,是字符串类型的时候,会报错了。例如:
上述url传值过程,视图部分我们用的是函数视图,其实也可以变成类视图来实现。效果完全一样。
例如:
运行结果:
运行效果是完全一样的。
其实我们在开发过程中,还有一种url传值的方式,类似这样的格式:
http://127.0.0.1:8000/detail?detailid=12345689
http://127.0.0.1:8000/detail?detailid=12345689&rownumber=200
那我们该如何接收值呢?是否可以按照先前的方法直接获取值呢?
哈哈,肯定不可以啊!
那该如何接收上述格式的数据呢?我们先来解析下上述的url是什么含义:
接收上述格式的参数,我们直接在视图里获取即可。并且加上?号后,django就不会把?号之后的部分看作视图了,而是把他们看作参数了。例如:http://127.0.0.1:8000/detail?detailid=12345689&rownumber=200 直接匹配的是detail视图,?号之后的内容被django忽略了。我们先运行下述代码:
运行效果为:
url路由设置没有去匹配问好 ?号之后的参数,那么我们该如何获取呢?
我们在写函数视图以及类视图的时候,每个方法有一个默认的参数request,当我们的url里的参数是通过?name=value的形式传递时候,我们需要通过request参数来获取。此刻,我们的urls.py为:
我们的函数视图代码如下:
好嘞,知道怎么获取了,那我们就撸代码。
运行效果:
这里需要注意的是:
关于url传值就这么多,后续我们结合实际代码,边练边用,现在大家先把基本规范熟悉下就行。
哈哈,今天先到这里了,明天我们继续。
如若转载,请注明出处:https://www.daxuejiayuan.com/19771.html