(一)设置路由分发规则
一个完整的路由包含:路由地址、视图函数(或者视图类)、路由变量和路由命名。其中基本的信息必须有:路由地址和视图函数(或者视图类),路由地址即我们常说的网址;视图函数(或者视图类)即项目应用(App)的views.py文件所定义的函数或类;路由变量和路由命名是路由的变量和命名设置,使路由具有动态变化和命名引用功能。(动态变化是指一个路由地址按照某个规律演变多种不同的路由地址:命名引用是指在视图、模型等其他项目文件使用路由命名生成相应的路由地址)
在默认情况下,设置路由地址是在项目同名的文件夹的urls.py文件里实现,这也是由配置文件settings.py的ROOT_URLCONF决定,以项目babies为例,配置属性ROOT_URLCONF指向babies文件夹的urls.py
一个项目中可能设有多个项目应用(App),而babies文件夹的urls.py是定义项目所有路由地址的总入口,如果项目中所有路由地址都在babies文件夹的urls.py中定义,当项目功能规模越来越大的时候,babies文件夹的urls.py定义的路由地址就会越来越多,从而造成难以管理的问题。
为了更好区分各个项目应用(App)的路由地址,我们在babies文件夹的urls.py中分别为每个项目应用(App)定义一条路由入口。首先在每个项目应用(App)的文件夹里创建urls.py文件,然后将新建的urls.py添加到babies文件夹的urls.py,添加方法由Django内置函数path和include实现。
- 每个应用(App)均创建一个路由文件urls.py,目前没有什么具体内容,只写一条语句,定义一个空列表urlpatterns:
-
urlpatterns = [ ]
整个babies文件夹的urls.py的代码说明
– from django.contrib import admin:导入内置Admin功能模块。
– from django.urls import path,include:导入Django的路由函数模块。
– urlpatterns:代表整个项目的路由集合,以列表格式表示,每个元素代表一条路由信息。
– path('admin/', 'admin.site.urls'):设定Admin管理系统的路由信息。'admin/'代表127.0.0.1:8000/admin的路由地址,admin后面的斜杠是路径分隔符,其作用等同于计算机中文件目录的斜杠符号; admin.site.urls指向内置Admin功能所自定义的路由信息,可以在Python目录Libsite-packagesdjangocontribadminsites.py中找到具体的定义过程。
3、路由设计模式的工作原理
从babies文件夹的urls.py定义的路由信息得知,每个项目应用(App)的路由地址交给项目应用的urls.py自行管理,这是路由的分发规则,使路由按照一定的规则进行分类管理。整个路由设计模式的工作原理说明如下:
当运行babies项目时, Django从babies文件夹的urls.py找到各个项目应用(App)的urls.py,然后读取每个项目应用(App)的urls.py定义的路由信息,从而生成完整的路由列表。
用户在浏览器上访问某个路由地址时,Django就会收到该用户的请求信息。
Django从当前请求信息中获取路由地址,并在路由列表里匹配相应的路由信息,再执行路由信息所指向的视图函数(或视图类),从而完成整个请求响应过程
在路由模式列表里添加两个路由,指向上面定义的视图函数 - commodityView与detailsView
from django.urls import path
from commodity.views import commodityView, detailsView
urlpatterns = [
path('.html', commodityView, name='commodity'),
path('details/
]
路由集合里包含四个路由
from django.urls import path
from shopper.views import shopperView, loginView, logoutView, shopcartView
urlpatterns = [
path('.html', shopperView, name='shopper'),
path('login.html', loginView, name='login'),
path('logout.html', logoutView, name='logout'),
path('shopcart.html', shopcartView, name='shopcart')
]
除了在路由地址设置变量外, Django还支持在路由地址外设置变量(路由的可选变量),比如在路由detail的路由中添加可选变量user,如下所示:
# 项目应用 commodity 的 urls.py
from django.urls import path
from .views import *
urlpatterns = [
path('.html', commodityView, {'user': 'admin'}, name='commodity'),
path('/detail.
]



