如果直接阅读本文,您可能有些不知所云,这是因为我用很多篇幅讲了一个事情,如果想知道上下文,那么建议您从本专栏第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

三、总结

看看我们本节所操作的文件在项目中的位置

python拦截路由器数据包 python 路由_python