url转发(URL转发记录的值为域名或URL地址,请重新填写)

好嘞,我们继续Django的学习,继续我们mvt里的views视图的学习,今天我们主要的内容是学习如何通过url进行传值。

需求: 我们想获取id为 1234567的文章的具体内容,最终能通过url http://127.0.0.1:8000/detail/1234567获取。

上述需求是不是很常见的需求?没错,我们在各类站点里都会有类似的需求的。那我们该如何去识别url解析获取我们的数呢? 我们首先去解析下上述url里都是什么意思。

url转发(URL转发记录的值为域名或URL地址,请重新填写)

上述的url的意思是,需要服务器上的detail视图来接收用户请求,并返回id为1234567文章的内容。

好嘞,明白了url的含义,那我们开始建自己的视图吧,然后在视图里获取id,因为我们现在没法查询数据库,那么我们的文章内容直接返回id即可。

我们继续在昨天的app里操作吧,直接添加视图即可。

url转发(URL转发记录的值为域名或URL地址,请重新填写)

url转发(URL转发记录的值为域名或URL地址,请重新填写)

然后我们再访问下看看效果

url转发(URL转发记录的值为域名或URL地址,请重新填写)

但是我们加上参数

url转发(URL转发记录的值为域名或URL地址,请重新填写)

Django在处理的我们的url的时候,把detail/1234567当作一个完整的视图了,但是我们只定义了detail视图,没有定义detail/1234567视图,所以报错了,那该怎么做呢?

很明显,我们在url的路由设置的时候需要指出,哪些是视图,哪些是参数,然后才能正常获取。因此其urls.py里的设置为下面的样子:

url转发(URL转发记录的值为域名或URL地址,请重新填写)

即在设置url的时候需要指出哪些是视图,哪些是参数,参数必须放在尖括号<>里。然后我们还需要在视图里获取该参数的值,那么视图实现也要修改下:

url转发(URL转发记录的值为域名或URL地址,请重新填写)

在detail方法里就可以使用detailid这个值了,我们这里直接返回!

这里一定要注意:

url转发(URL转发记录的值为域名或URL地址,请重新填写)

修改完后运行下看看效果:

url转发(URL转发记录的值为域名或URL地址,请重新填写)

url转发(URL转发记录的值为域名或URL地址,请重新填写)

看看,可以了吧,随着这个detialid的变化,我们获取的值是变化的。

那么我们修改下视图里的实现,把第二个参数detailid改个名字,例如:

url转发(URL转发记录的值为域名或URL地址,请重新填写)

再看看运行结果:

url转发(URL转发记录的值为域名或URL地址,请重新填写)

好嘞,我们现在再多传递几个参数吧,代码如下:

url转发(URL转发记录的值为域名或URL地址,请重新填写)

视图修改如下:

url转发(URL转发记录的值为域名或URL地址,请重新填写)

看看运行效果

url转发(URL转发记录的值为域名或URL地址,请重新填写)

url转发(URL转发记录的值为域名或URL地址,请重新填写)

那么后续我们就可以根据我们的需要,去传递我们需要的多个参数了!

默认url传递的参数都是字符串的,如果我们想传递指定类型的数据,那么还需要做一些限定。例如我们限定第两个参数必须是int类型的。那么url路由设置这里就需要改动了:

url转发(URL转发记录的值为域名或URL地址,请重新填写)

当我们传递的参数不是int类型,是字符串类型的时候,会报错了。例如:

url转发(URL转发记录的值为域名或URL地址,请重新填写)

url转发(URL转发记录的值为域名或URL地址,请重新填写)

上述url传值过程,视图部分我们用的是函数视图,其实也可以变成类视图来实现。效果完全一样。

例如:

url转发(URL转发记录的值为域名或URL地址,请重新填写)

url转发(URL转发记录的值为域名或URL地址,请重新填写)

运行结果:

url转发(URL转发记录的值为域名或URL地址,请重新填写)

url转发(URL转发记录的值为域名或URL地址,请重新填写)

运行效果是完全一样的。

其实我们在开发过程中,还有一种url传值的方式,类似这样的格式:

http://127.0.0.1:8000/detail?detailid=12345689

http://127.0.0.1:8000/detail?detailid=12345689&rownumber=200

那我们该如何接收值呢?是否可以按照先前的方法直接获取值呢?

哈哈,肯定不可以啊!

那该如何接收上述格式的数据呢?我们先来解析下上述的url是什么含义:

url转发(URL转发记录的值为域名或URL地址,请重新填写)

接收上述格式的参数,我们直接在视图里获取即可。并且加上?号后,django就不会把?号之后的部分看作视图了,而是把他们看作参数了。例如:http://127.0.0.1:8000/detail?detailid=12345689&rownumber=200 直接匹配的是detail视图,?号之后的内容被django忽略了。我们先运行下述代码:

url转发(URL转发记录的值为域名或URL地址,请重新填写)

url转发(URL转发记录的值为域名或URL地址,请重新填写)

运行效果为:

url转发(URL转发记录的值为域名或URL地址,请重新填写)

url转发(URL转发记录的值为域名或URL地址,请重新填写)

url路由设置没有去匹配问好 ?号之后的参数,那么我们该如何获取呢?

我们在写函数视图以及类视图的时候,每个方法有一个默认的参数request,当我们的url里的参数是通过?name=value的形式传递时候,我们需要通过request参数来获取。此刻,我们的urls.py为:

url转发(URL转发记录的值为域名或URL地址,请重新填写)

我们的函数视图代码如下:

url转发(URL转发记录的值为域名或URL地址,请重新填写)

好嘞,知道怎么获取了,那我们就撸代码。

url转发(URL转发记录的值为域名或URL地址,请重新填写)

运行效果:

url转发(URL转发记录的值为域名或URL地址,请重新填写)

url转发(URL转发记录的值为域名或URL地址,请重新填写)

这里需要注意的是:

url转发(URL转发记录的值为域名或URL地址,请重新填写)

关于url传值就这么多,后续我们结合实际代码,边练边用,现在大家先把基本规范熟悉下就行。

哈哈,今天先到这里了,明天我们继续。

    
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 cloud@ksuyun.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.daxuejiayuan.com/19771.html