最近仍然有很多小伙伴会经常来问我一些关于接口测试平台教程攻略的技术问题,当中有大部分是urls.py写的不对。
照葫芦画瓢的结果就是,只是抄其形,不得其意。
关于urls.py的各种方法,设计,函数,其实很多很多。但是我为了降低初学者的门槛和学习成本,所以就用最简单的1-2个函数来实现所有功能。
用宇智波佐助的一句话说就是:高手用普通的写轮眼照样可以打败普通人的万花筒。
用独孤求败的一句话说就是:到此境界者,草木竹石皆可为剑。
实现功能,完成教程,做一个好的培训教程内容的关键不是填鸭式的疯狂给你灌输所有知识点和函数,而是用最少的函数带你实现最多的功能。等熟悉之后,在逐渐学习新的更高深的函数知识点,不是更好么?
一个讲师的能力,不在于教你多少东西,教的再多不如百度官方文档多。而是在于用什么科学的方法,让你循序渐进,一点一点进入门内。教学方法才是根本。
现在回过头来说这个urls.py
因为django版本的不同,我教程中有的平台用了url() 和 path() 俩个系列。
这里先说下,俩个函数其实功能是一样的。我推荐选用后面的path。
但是教程已经用了url,没法更改。所以很多同学在抄代码的过程中,不知道url如何变换成对应的path。
这里继续,我会用最土的好记的办法给你说明:
首先是:路由的变量,是否需要改动?
url方法内可以写 固定的路由, 也可以写带变量的路由。
path方法内只能写固定的路由,re_path方法内才可以写带变量的路由,所以path和re_path通常在一个项目内使用。
那什么叫做固定路由,什么叫做带变量的路由呢?
固定路由: /abcdefg/higklmn/
带变量路由:/abcdefg/变量/
在很多进入诸如不同项目页面的时候,路由都是需要带变量的,这个变量通常是这个项目的id。
那么在url 和 path+re_path 中,变量的写法一样么?
答案是 完全一致!
都是这么写: (?P<变量名>.*)
好,到这里,我们知道了第一个知识点,url和path 变换的时候,其中的变量写法不用改。
然后是:
路由的前后需要改动么?
url的路由写法是:url(r"^路由/$") 其中前面用r 和 ^开头,结尾用/ 和 $开头。
而path/re_path的写法是:path("路由/") 前面什么都没有,结尾就一个 /
所以大家互相变换的时候,按照这个写就可以了,其中原由你可以自行翻阅正则相关知识。
然后是:
变量中的 .+ 和 .* 是什么意思??
首先明确,这个和用re_path还是 url方法都没关系。主要是正则的一种写法,你可以不用了解太深入,但是+号和*号代表的意思要明白。
+号表示这个变量必须要有!没有就报错!
*号表示这个变量为空也可以,不报错。
其中的. 代表任意字符。
很多时候我们写项目路由,其中有些变量只是用来当做备用参数,用来接收一些意外的数据用,那么这里可以用.*号 ,就是无所谓有没有这个数据。而用来请求中必须要带某些数据时,才用到.+, 比如进入项目详情页,你连项目id都不传,那这个url执行还有什么意义,后台知道要进入哪个项目之内么?所以项目id变量是必传的。
就像这样:(注意其中用的.+)
re_path('case_list/(?P<did>.+)/', case_list)
然后继续说:
url和path/re_path 怎么导入?
from django.urls import path,re_path
from django.conf.urls import url
最后,关于这些方法的更多用法,可以自行百度或关注我后续公众号文章。