精通Django 3 Web开发
上QQ阅读APP看书,第一时间看更新

3.4 路由的定义规则

在3.3节看到,我们已在项目应用index、shopper和commodity的urls.py中定义了网站首页、商品列表页、商品详细页、购物车页面、个人中心页面、用户注销和用户登录注册页面的路由地址。综合分析得知,路由地址的定义规则如下:

(1)每个urls.py文件的路由地址必须在列表urlpatterns里定义,换句话说,每个urls.py必须设有一个列表urlpatterns,该列表是用于定义路由信息。

(2)每条路由是由函数path定义,函数path设置了3个参数:第一个参数是设置具体的路由地址;第二个参数是指向项目应用的views.py的某个视图函数或视图类,负责处理路由的业务逻辑;第三个参数为name='index',这是函数path的可选参数,该参数是命名路由地址。

(3)如果函数path第二个参数使用内置函数include,该路由是实现路由分发功能。也就是说,如果函数path的第二个参数是函数include,该路由为路由分发;如果函数path的第二个参数是项目应用的views.py的视图类或视图函数,该路由为网站的路由地址。

函数path是Django 2.0以上版本定义的内置函数,如果开发环境是Django 1.X版本,那么路由定义应使用函数url。从参数的角度分析,函数path和函数url的参数设置是相同的,只不过函数url定义的路由地址需设置路由符号^和$。^代表当前路由地址的相对路径;$代表当前路由地址的终止符。

我们以项目应用commodity的urls.py为例,对路由commodity和detail使用的函数url进行定义,定义过程如下所示。

从上述代码看到,函数url要为每个路由地址设置路由符号^和$,而且路由变量id应使用正则表达式表示(如(?P<id>\d+))。综上所述,Django 1的路由规则是使用Django的url函数实现路由定义,并且路由地址设有路由符号^和$,读者需要区分路由符号^和$的作用与使用规则,在某种程度上,它比Django 2版本复杂并且代码可读性差,因此Django 1的路由规则应该会在Django以后的新版本里逐渐淘汰。