【补充】Django中路由分发的本质
【一】路由分发机制
- 在Django中,admin 路由分发的本质是将管理员后台管理功能与应用程序正常的 URL 分发机制进行了分离。
- admin 路由分发可以让开发者方便地创建、配置和管理应用程序的后台管理界面。
【二】关键部分
-
admin.site.register(model):
-
通过调用
admin.site.register()
方法,将应用程序中的模型(Model)注册到管理员后台。 -
这样,Django 就知道要为这些模型提供哪些默认的管理功能
- 如列表显示、搜索、过滤、添加、编辑、删除等。
-
-
admin.autodiscover():
-
该方法被用于自动发现应用程序中的
admin.py
文件,以便导入其中的admin
实例。 -
在 Django 的设置文件中,通常会包含这样一行代码:
-
admin.autodiscover()
。 -
这会触发 Django 在每个应用程序中查找
admin.py
文件 -
并将其导入到管理员后台。
-
-
-
admin.site.urls:
- 在项目的 URL 配置中,通常会包含一个路由模式,即将
^admin/
路径匹配到admin.site.urls
。 - 这个 URL 模式实际上将所有以
admin/
开头的请求都分发给了管理员后台的视图函数。 - Django 的
admin.site.urls
内部使用了一些 URL 配置和视图处理来渲染和处理后台管理界面的相关请求。
- 在项目的 URL 配置中,通常会包含一个路由模式,即将
- 通过以上的机制,Django 的 admin 路由分发可以将管理员后台的 URL 请求与应用程序正常的 URL 分发机制进行隔离,并提供一套功能强大、易于配置和扩展的后台管理界面。
- 开发者可以在
admin.py
文件中自定义注册的模型的显示方式、过滤器、搜索字段、编辑表单等各个方面,以满足具体业务需求。
【三】案例演示
path('admin/', ([],None,None)),
- admin路由分发的本质是使用
include
函数将admin.site.urls
包含进项目的URL配置中。 - 具体来说
admin.site.urls
实际上是一个AdminSite
类的实例- 其中定义了一个名为
urls
的装饰器。
- 其中定义了一个名为
- 这个装饰器返回了一个三元组
- 包含了后台管理界面的URL配置、名称和命名空间。
- 当我们在项目的URL配置中使用
include('admin.urls')
或者path('admin/', admin.site.urls)
时- Django会将后台管理界面的URL配置追加到主URL配置中
- 从而使得以
admin/
开头的URL都可以被匹配。
- 而
AdminSite
类中的urls
装饰器的具体实现是通过定义一个property
属性- 返回了
self.get_urls(), 'admin', self.name
。 - 这里的
self.get_urls()
实际上调用了AdminSite
类的get_urls
方法 - 用于获取后台管理界面的URL配置列表。
- 返回了
- 通过这种方式,我们可以在项目的URL配置中套娃无限制地添加多层级的URL,构建复杂的 URL 分发结构。
- 比如,可以在
admin/
路径下再嵌套其他路径和视图函数,形成多层级的后台管理界面。
- 比如,可以在
- 以下是一个完整且稍微复杂一点的案例演示:
from django.contrib import admin
from django.urls import include, path
from django.http import HttpResponse
def index(request):
return HttpResponse("This is the index page.")
urlpatterns = [
# 主页
path('', index, name='home'),
# 后台管理界面
path('admin/', admin.site.urls),
# 自定义的二级路径
path('custom/', include([
# 二级路径下的一级路径
path('level1/', include([
# 二级路径下的一级路径下的二级路径
path('level2/', include([
# 二级路径下的一级路径下的二级路径下的三级路径
path('level3/', index, name='custom-level3'),
])),
])),
])),
]
- 在上述代码中,我们定义了一个带有自定义路径的URL配置,包括了主页和后台管理界面。
- 在自定义路径的部分,我们通过
include
函数进行嵌套,形成了多层级的URL结构。
- 在自定义路径的部分,我们通过
- 其中
- 后台管理界面被包含在
admin/
路径下,而自定义路径则为custom/
。 custom/
路径下又包含了多层级的路径,最终指向了一个名为custom-level3
的视图函数。
- 后台管理界面被包含在
- 通过这样的URL配置
- 我们可以实现非常灵活的URL分发,并构建符合我们项目需求的后台管理界面和其他自定义功能页面。