【Django】路由分发规则

Django中的路由分发(This is the best 宝典!看这一个就学会啦!!) Django路由分发配置!宝典! 阅读详情

一、课程导入
(一)复习
创建项目(django-admin startproject XXX)
创建应用(python manage.py startapp XXX)
配置应用、模板、数据库、静态资源、媒体资源
内置指令(30个,必须了解每个指令的具体作用)
(二)路由
路由称为URL (Uniform Resource Locator - 统一资源定位符),也可以称为URLconf, 是对可以从互联网上得到的资源位置和访问方法的一种简洁表示,是互联网上标准资源的地址。互联网上每个文件都有一个唯一的路由,用于指出网站文件的路径位置。简单地说,路由可视为我们常说的网址,每个网址代表不同的网页。
二、新课讲授
(一)设置路由分发规则
一个完整的路由包含:路由地址、视图函数(或者视图类)、路由变量和路由命名。其中基本的信息必须有:路由地址和视图函数(或者视图类),路由地址即我们常说的网址;视图函数(或者视图类)即项目应用(App)的views.py文件所定义的函数或类;路由变量和路由命名是路由的变量和命名设置,使路由具有动态变化和命名引用功能。(动态变化是指一个路由地址按照某个规律演变多种不同的路由地址:命名引用是指在视图、模型等其他项目文件使用路由命名生成相应的路由地址)

首先创建babies文件

 

在默认情况下,设置路由地址是在项目同名的文件夹的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实现。

1、创建应用的路由文件(子路由) - urls.py

  • 每个应用(App)均创建一个路由文件urls.py,目前没有什么具体内容,只写一条语句,定义一个空列表urlpatterns

 

(2)创建commodity应用的路由文件

  • commodity目录下创建urls.py文件,添加一个名为urlpatterns的空列表

 

(3)创建shopper应用的路由文件

  • shopper目录下创建urls.py文件,添加一个名为urlpatterns的空列表

 

2、配置项目的路由文件(主路由) - urls.py

(1)定义项目的路由集合

  • 使项目的urls.py的urlpatterns指向每个应用的urls.py

 (2)主路由文件代码说明
babies文件夹的urls.py定义了5条路由信息,分别是Admin站点管理、首页地址(项目应用index的urls.py) 、商品信息(项目应用commodity的urls.py) 、购物车信息(项目应用shopper的urs.py)和媒体资料。其中, Admin站点管理在创建项目时己自动生成,一般情况下无须更改。
整个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目录Lib\site-packages\django\contrib\admin\sites.py中找到具体的定义过程。

 path('', include(('index.urls', 'index'), namespace='index')) :路由地址为"/",即 127.0.0.1:8000,通常是网站的首页;路由函数include是将该路由地址分发给项目应用index的urls.py处理。(说明:include((pattern_list,app_namespace),namespace=None) app_namespace:应用命名空间;namespace:实例命名空间)
path('commodity/', include(('commodity.urls', 'commodity'), namespace='commodity')):路由地址为"/commodity/",即127.0.0.1:8000/commodity/,这是商品详细和商品列表页面;路由函数include是将该路由地址分发给项目应用commodity的urls.py处理。
path('shopper/', include(('shopper.urls', 'shopper'), namespace='shopper')):路由地址为 "/shopper/",即127.0.0.1:8000/shopper/,这是购物车、个人中心、用户注册等页面;路由函数include是将该路由地址分发给项目应用shopper的urls.py处理。
re_path('media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT}, name='media'):路由地址为"/media/xxx",即127.0.0.1:8000/media/xxx,这是媒体定义的路由地址,路由函数re_path表示允许在路由地址里面设置正则表达式。

3、路由设计模式的工作原理
从babies文件夹的urls.py定义的路由信息得知,每个项目应用(App)的路由地址交给项目应用的urls.py自行管理,这是路由的分发规则,使路由按照一定的规则进行分类管理。整个路由设计模式的工作原理说明如下:

当运行babies项目时, Django从babies文件夹的urls.py找到各个项目应用(App)的urls.py,然后读取每个项目应用(App)的urls.py定义的路由信息,从而生成完整的路由列表。
用户在浏览器上访问某个路由地址时,Django就会收到该用户的请求信息。
Django从当前请求信息中获取路由地址,并在路由列表里匹配相应的路由信息,再执行路由信息所指向的视图函数(或视图类),从而完成整个请求响应过程。
(二)路由分发详解
1、路由函数include的参数说明
从上面看到,我们设置项目路由分发功能的时候,除了使用内置函数path和include之外,还在路由中设置了参数namespace,该参数是可选参数,是Django设置路由的命名空间。
路由函数include设有参数arg和namespace,参数arg指向项目应用App的urls.py文件,其数据格式以元组或字符串表示;可选参数namespace是路由的命名空间。
若要对路由设置参数namespace,则参数arg必须以元组格式表示,并且元组的长度必须为2。以路由path('', include(('index.urls', 'index'), namespace='index'))为例,参数arg为('index.urls', 'index'),参数的每个元素说明如下:
第一个元素为项目应用的urls.py文件,比如('index.urls','index')的“index.urls”,这是代表项目应用index的urls.py文件。
第二个元素可以自行命名,但不能为空,一般情况下是以项目应用的名称进行命名,如('index.urls','index')的“index”是以项目应用index进行命名的。
如果路由设置参数namespace并且参数arg为字符串或元组长度不足2的时候,比如我们将首页的路由分发设为path('', include(('index.urls'), namespace='index')),当运行项目的时候,Django就会提示错误信息,如下图所示。

 将路由函数include的第一个参数设置为二值元组,再启动项目就没有错误。

 2、路由函数include的作用
路由函数include的作用是将当前路由分配到某个项目应用的urls.py文件,而项目应用的urls.py文件可以设置多条路由,这种情况类似计算机上的文件夹A,并且该文件夹下包含多个子文件夹,而`Django的命名空间namespace相当于对文件夹A进行命名。
假设项目路由设计为:在babies文件夹的urls.py定义3条路由,每条路由都使用路由函数include,并分别命名为A、B、C,每条路由对应某个项目应用的urls.py文件,并且每个项目应用的urls.py文件里定义若干条路由。
根据上述的路由设计模式,将babies文件夹的urls.py视为计算机上的D盘,在D盘下有3个文件夹,分别命名为A、B、C,每个项目应用的urls.py所定义的若干条路由可视为这3个文件夹里面的文件。在这种情况下,Django的命名空间namespace等同于文件夹A、B、C的文件名。
三个命名空间:index、commodity、shopper

 三个命名空间对应的三个文件夹:index、commodity、shopper:

 Django的命名空间namespace可以为我们快速定位某个项目应用的urls.py,再结合路由命名name就能快速地从项目应用的urls.py找到某条路由的具体信息,这样就能有效管理整个项目的路由列表。有关路由函数include的定义过程,可以在Python安装目录下找到源码(Lib\site-packages\django\urls\conf.py)进行解读。
(三)设置商城的路由地址
我们已在babys文件夹的urls.py分别为项目应用index、shopper和commodity设置路由分发功能,本节将会在项目应用index、shopper和commodity的urls.py定义网站首页、商品列表页、商品详细页、购物车页面、个人中心页面和用户登录注册页面的路由地址。
1、index应用的配置
(1)编写index应用的视图views.py
创建视图函数 - indexView

 

  • indexView为视图函数的名称
  • index.html对应模板文件夹下的一个模板文件
  • 目前index.html只显示一条信息“母婴商城首页”

 

  • render()用于渲染模板页面

(2)配置index应用的路由urls.py

  • 在路由模式列表里添加一个路由,指向上面定义的视图函数 - indexView

 

(1)第一个参数为空字符串,这是设置具体的路由地址,由于babies文件夹的urls.py的路由分发为path('', include(('index.urls', 'index'), namespace='index')) , 即代表网址127.0.0.1:8000,而index的urls.py定义的路由地址index设为空字符串,那么路由地址index的网址为127.0.0.1:8000。
(2)第二个参数为indexView,这是指向项目应用index的views.py的某个视图函数或视图类,当用户在浏览器访问127.0.0.1:8000的时候, Django将接收到一个HTTP请求,从该请求中获取路由地址并与自身的路由列表进行匹配,如果路由地址匹配成功, Django将HTTP请求交给路由地址指向的某个视图函数或视图类进行业务处理。
(3)第三个参数为name='index’,这是函数path的可选参数,该参数是命名路由地址。实际开发中必须为每个路由地址进行命名,可以在视图或模板中使用路由名称生成相应的路由地址。
(3)测试index应用的路由配置
启动项目,访问http://127.0.0.1:8000

 

Django路由分发 很多时候,我们在访问一些网站时,网址最后都会有个/,那么如果不加/会发生什么?301,也就是重定向发生错误,那么该如何解决?但是并不建议更改,因为会增加服务器的负担,这里大家仅仅只需要知道解决办法做以了解就好。 阅读详情

相关推荐

从‘拍照片’到‘写代码’:一文拆解Demura补偿技术的完整工作流(OTP/IC烧录)

本文深入解析Demura补偿技术在显示面板制造中的全链路应用,从光学检测到算法补偿,详细拆解了亮度型、色度型和结构型Mura的分类与量化方法。通过高精度光学采集系统和补偿算法核心流程,实现硬件缺陷的精准修正,并探讨了OTP烧录与独立Demura方案的工程实践,最终提升显示面板良率与视觉体验。

weixin_30616969的博客 464

Django讲课笔记07:设置路由分发规则

路由 - 子路由 - 视图 - 模板

howard2005的专栏 1776

Django 路由分发

一、 静态路由 urlpatterns属性 urlpatterns是路由文件中的一个全局变量,用来存放路由及视图函数的映射关系 用户发起的请求URL都会首先进入主控制目录下的这个urls.py文件中进行查找匹配 首先找到urls.py下的urlpatterns全局变量,这是一个路由规则实例的列表数据。 按照先后定义顺序,进行路由匹配。 找到第一个匹配项时停止匹配,执行匹配到的视图函数。 遍历完全,未发现匹配,django进行异常处理 其中urlpatterns中的每一个路由映射规则可以由path或re_

The的博客 1065

django路由分发

定义URL模式:在Django中,路由分发通常通过定义一系列的URL模式来实现。这些模式指定了URL的结构,以及当这些URL被访问时应该调用哪个视图函数。映射到视图:每个URL模式都与一个视图函数或类关联。当一个请求的URL与某个模式匹配时,Django就会调用与之关联的视图函数来处理请求。分发请求:路由分发的目的是将用户的请求分发到正确的视图函数。这个过程是动态的,根据请求的URL来决定。组织URL:路由分发有助于组织项目的URL结构,使其清晰和易于维护。

yz_518的博客 1900

Django基础入门⑧:Django路由详细讲解

Django路由系统的一个重要组成部分,它允许我们将一个应用程序的URL模式与另一个应用程序的URL模式组合在一起,从而创建更复杂的URL映射。我们可以使用函数在中嵌套URL配置。使用的通用语法如下: 其中,是目标URL前缀,是目标应用程序的URL配置模块。 通过,我们可以将多个Django应用程序相互分离,每个应用程序负责处理其内部的URL。但是,如果某个URL模式需要跨越应用程序,则可以使用将多个应用程序内的URL组装起来。 例如,假设我们有两个应用程序,一个名为,一个名为(需要注册app到项目中

weixin_50804299的博客 9581

Django设置路由分发规则

(一)复习 创建项目(django-admin startproject XXX) 创建应用(python manage.py startapp XXX) 配置应用、模板、数据库、静态资源、媒体资源 内置指令(30个,必须了解每个指令的具体作用) (二)路由 路由称为URL (Uniform Resource Locator- 统一资源定位符),也可以称为URLconf, 是对可以从互联网上得到的资源位置和访问方法的一种简洁表示,是互联网上标准资源的地址。互联网上每个文件都有一个唯一的路由,用于指出网站文件

m0_61604047的博客 706

Django设置路由分发规则2

(四)路由的定义规则 (1)每个urls.py文件的路由地址必须在列表urlpatterns里定义,换句话说,每个urls.py必须设有一个列表urlpatterns,该列表是用于定义路由信息。 (2)每条路由是由函数path定义,函数path设置了3个参数:第一个参数是设置具体的路由地址;第二个参数是指向项目应用的views.py的某个视图函数或视图类,负责处理路由的业务逻辑;第三个参数为name='XXX’,这是函数path的可选参数,该参数是命名路由地址。 (3)如果函数path第二个参数使用内置

m0_61604047的博客 465

Django设置路由分发规则01

1.创建路由文件 分别在index,commodity,shopper目录下创建urls.py文件,添加urlpatterns空列表 2.使项目的utls.py的列表指向相应的文件 3.创建视图函数-indexView 4.在路由模式列表里添加路由,指向定义的函数 5.启动项目调试 访问http://127.0.0.1:8000/index 访问http://127.0.0.1:8000/commodity.html 访问http://127...

qq_61660518的博客 301

Django-配置媒体资源-设置路由分发规则(下)

(一)设置路由分发规则 1、设置路由 (1)在babies文件夹下的settings.py文件中配置属性ROOT_URLCONF (2)在每个app下创建一个路由文件urls.py,并定义一个空列表 commodity index shopper 2、配置路由 (1)在主路由中定义路由集合 使项目的urls.py的urlpatterns指向每个应用的urls.py (二)设置路由地址 1、...

qq_53637118的博客 889

Django-配置媒体资源-设置路由分发规则

一)设置路由分发规则 1、设置路由 (1)在babies文件夹下的settings.py文件中配置属性ROOT_URLCONF(2)在每个app下创建一个路由文件urls.py,并定义一个空列表 commodity index shopper 2、配置路由 (1)在主路由中定义路由集合 使项目的urls.py的urlpatterns指向每个应用的urls.py (二)设置路由地址 1、index应用的配置 编写index.html页面 (1)编写index应用的视图views.py 创建视图函数indexV

m0_62817700的博客 170

Django 设置路由分发规则

Django 设置路由分发规则

qq_61660527的博客 204

Django--(url(路由)抓取,分发规则

路由层的配置,路由层在于 后面的具体函数, 首先在主程序当中的urls中引入这些报,第一个和第二个都是django的内置方法,re_path是正则表达式中的用法,匹配正则匹配到的信息出来。 这这几个匹配之后就是在网页中输入如articles/2003/就能找到相应的页面,然后定位到views的special_case_2003方法 然后找到app2的视图views文件当中 这时候,在网页当中输入http://127.0.0.1:8000/articles/2003/就能找到相应的信息...

weixin_55435895的博客 333

母婴商城:设置路由分发规则

这里写目录标题一、复习二、设置路由分发规则1.创建应用的路由文件(子路由) - urls.py(1)创建index应用的路由文件(2)创建commodity应用的路由文件(3)创建shopper应用的路由文件2.配置项目的路由文件(主路由) - urls.py- 定义项目的路由集合3.设置商城的路由地址(1)index应用的配置(2)commodity应用的配置(3)shopper应用的配置4.路由的定义规则 一、复习 上篇文章:https://blog.csdn.net/m0_52158568/artic

m0_52158568的博客 1130

设置路由分发规则

django

m0_61619309的博客 406
上一篇: 【Django】简介
下一篇: 【Django】定义商场的数据模型
酒爷大大
博客等级 码龄5年 8粉丝 · 12原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值