如果直接阅读本文,您可能有些不知所云,这是因为我用很多篇幅讲了一个事情,如果想知道上下文,那么建议您从本专栏第22章看起:Python3开发–22–了解Django框架
一、路由分发规则
在默认情况下,设置路由地址是在项目同名文件夹下的urls.py
文件里实现的。但一个项目中可能有多个应用,如果所有应用的路由都在urls.py
中定义,当项目规模越来越大的时候,urls.py
中定义的路由地址就会越来越多,从而造成难以管理的问题。
为了更好的设计项目的路由地址,我们在shop/urls.py
中分别为每个应用定义一个路由入口,即每个应用下创建一个urls.py
文件,这样,即将每个应用的路由地址交给应用自己的urls.py
来管理。
修改shop/urls.py
from django.conf import settings
from django.contrib import admin
from django.urls import path, re_path, include
from django.views.static import serve
urlpatterns = [
# 设定admin管理系统的路由信息
path('admin/', admin.site.urls),
# 添加应用index、commodity、shopper的urls.py
# namespace是可选参数,是Django设置路由的命名空间
path('', include(('index.urls', 'index'), namespace='index')),
path('commodity', include(('commodity.urls', 'commodity'), namespace='commodity')),
path('shopper', include(('shopper.urls', 'shopper'), namespace='shopper')),
# 配置媒体资源的路由信息
re_path('media/(?P<path>.*)', serve, {'document_root':settings.MEDIA_ROOT}, name='media'),
]
整个路由设计模式的工作原理如下:
1、当项目运行时,Django从shop/urls.py
找到各应用的urls.py
,然后读取每个urls.py
定义的路由信息,从而生成完整的路由列表。
2、用户在浏览器上访问某个路由地址时,Django会收到该用户的请求信息。
3、Django从当前请求信息中获取路由地址,并在路由列表里匹配相应的路由信息,再执行路由信息所指向的视图函数,从而完成整个请求的响应过程。
二、设置应用路由地址
2.1、路由定义规则
1、每个urls.py
文件必须设有一个列表urlpatterns
,该列表是用于定义路由的信息。
2、每条路由都是函数path定义,函数path设置了3个参数:第一个参数是设置具体的路由地址。第二个参数是指向应用的views.py
的某个视图函数,负责处理路由的业务逻辑。第三个参数是可选参数,用于命名路由地址。
3、如果函数path的第二个参数使用了内置函数include,该路由为路由分发。如果使用了应用的views.py
的某个视图函数,则该路由为网站的路由地址。
2.2、定义应用路由
1、创建文件:index/urls.py
from django.urls import path
from .views import *
urlpatterns = [
# 第一个参数用于设置具体的路由地址,此处设置为空
# 第二个参数是指向index应用的views.py的某个视图函数
# 第三个参数用于命名路由地址,是个可选参数
path('', indexView, name='index'),
]
修改文件:index/views.py
# 本节的重点是路由,我们先这样写,内容以后再填充
# 如果不写index/urls.py中会因为找不到函数而报错
def indexView():
pass
2、创建文件:shopper/urls.py
from django.urls import path
from .views import *
urlpatterns = [
# 第一个参数用于设置具体的路由地址
# 第二个参数是指向index应用的views.py的某个视图函数
# 第三个参数用于命名路由地址,是个可选参数
path('.html', shopperView, name='shopper'),
path('/login.html', loginView, name='login'),
path('/logout.html', logoutView, name='logout'),
path('/shopcart.html', shopcartView, name='shopcart'),
]
修改文件:shopper/views.py
# 本节的重点是路由,我们先这样写,内容以后再填充
# 如果不写shopper/urls.py中会因为找不到函数而报错
def shopperView():
pass
def loginView():
pass
def logoutView():
pass
def shopcartView():
pass
3、创建文件:commodity/urls.py
from django.urls import path
from .views import *
urlpatterns = [
# 第一个参数用于设置具体的路由地址
# 第二个参数是指向commodity应用的views.py的某个视图函数
# 第三个参数用于命名路由地址,是个可选参数
path('.html', commodityView, name='commodity'),
# 设置了路由变量id,该变量ID以整数型表示
path('/detail.<int:id>.html', detailView, name='detail'),
]
修改文件:commodity/views.py
# 本节的重点是路由,我们先这样写,内容以后再填充
# 如果不写commodity/urls.py中会因为找不到函数而报错
def commodityView():
pass
def detailView():
pass
三、总结
看看我们本节所操作的文件在项目中的位置