首页 > 其他分享 >【补充】Django中路由分发的本质

【补充】Django中路由分发的本质

时间:2023-07-21 15:56:34浏览次数:43  
标签:分发 admin 中路 路径 Django URL urls 后台

【补充】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 配置和视图处理来渲染和处理后台管理界面的相关请求。
  • 通过以上的机制,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分发,并构建符合我们项目需求的后台管理界面和其他自定义功能页面。

标签:分发,admin,中路,路径,Django,URL,urls,后台
From: https://www.cnblogs.com/dream-ze/p/17571611.html

相关文章

  • 前后端分离实现注册+登录(Vue3.0 + Django3.2)
    博客地址:https://www.cnblogs.com/zylyehuo/一、使用vite+webstorm搭建Vue环境,构建前端1、结构树2、main.jsimport{createApp}from'vue'//import'./style.css'importAppfrom'./App.vue'importrouterfrom"./utils/router";......
  • Django基本数据库操作
    Django基本数据库操作@目录Django基本数据库操作......
  • Django的安装与运行
    Django是一个由Python编写的一个开放源代码的Web应用框架。使用Django,只要很少的代码,Python的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的Web服务Django本身基于MVC模型,即Model(模型)+View(视图)+Controller(控制器)设计模......
  • Django入门
    Django入门学习1搭建web站点及业务框架1安装Django方法:1终端输入命令:pipinstalldjango2在python解释器中添加,步骤如下如果遇到速度比较慢的状况,可以加入国内阿里云镜像站点来安装:pipinstall-ihttps://mirrors.aliyun.com/pypi/simpledjango2创建了一个名为my......
  • 站点和资源django(1)(2)
    搭建web站点及其业务框架安装djangopipinstalldjango或pipinstall-ihttps://mirrors.aliyun.com/pypi/simpledjango在安装执行完后,库默认在env目录的site-packages,没有env目录可以在终端执行python-mvenvvenv创建web站点项目名为djangoProj,django-adminstartproj......
  • django中request.query_params.get()和 request.data.get()的区别
    params用于获取字符串,data:用于获取正文,post方法两个参数都可以使用,get方法只能使用params例如:name=request.query_params.get('name',None)如果URL的查询参数中包含了名为"name"的参数,那么request.query_params.get('name',None)将返回该参数的值。否则,将返回None......
  • 通过任意脚本调用django的模型类
    通过任意脚本调用django的模型类需求:我想通过任意脚本,调用django的模型类,查询一下数据库的信息,或者新增数据库数据,而不需要通过启动django项目或者使用pythonmanage.pyshell这种方式来运行解决办法脚本中添加django项目的路径到sys.path环境变量中设置django项目的环境变量......
  • Django-4.2博客开发教程:需求分析并确定数据表(四)
    前三步已经完成了一个初步流程,从创建项目》应用》数据迁移》访问首页。以下是我整理的基本流程,接下来一步一步完成整个项目。 1.我们的需求: 博客的功能主要分为:网站首页、文章分类、文章内容、图片、文章推荐、文章排行、热门推荐、文章搜索 等~1、网站首页:首页是整个网站......
  • Django路由分发
    1.简单的项目不需要路由分发,直接在根路径下的url.py编写即可2.路由分发利用上期学过的在apps文件夹下创建多apphttps://www.cnblogs.com/khalil12138/p/17540805.html  再将路由拆分到各自app的urls.py下 ......
  • django框架安装mysql
    Django框架安装MySQLMySQL是一种常见的关系型数据库管理系统,广泛用于开发Web应用程序。Django框架是一个高效、灵活的PythonWeb框架,它提供了与多种数据库管理系统集成的能力。本文将介绍如何在Django框架中安装和配置MySQL数据库。步骤一:安装MySQL首先,我们需要在本地机器上安装......