Django之路由分发

本文介绍了在Django中使用include函数进行路由分发的方法,包括如何在不同app之间拆分URL模式,以及命名空间和app_name的作用。还探讨了手动路由分发和使用name和namespace的实践案例。
摘要由CSDN通过智能技术生成
1.include方法进行路由分发

在Django中,include函数用于将一个URL模式包含到另一个URL模式中,实现路由的分发。
一般时以include+app的形式,将功能拆分不到不同的app中。
当使用include函数时,需要指定一个字符串参数,该字符串参数是一个URL模式的命名空间。Django会根据该命名空间去查找对应的URL模式,并将其包含到当前的URL模式中。include一般返回数据元组。

a.准备条件

由于创建app时,不会给我们自动创建属于其的urls.py,我们需要自己创建,在前文初入门时我们创建了一个app名为test2,所以我们自己创建urls.py在其目录中,可见:
image.png
我们可以将之前test1中创建的work和hello两个path转移到/test2/urls.py中/:
image.png
因为要使用include方法,所以我们需要导入一些依赖包:

from django.conf.urls import url, include
b.实验:include的用法

那么现在在主路由中我们只有admin一个路径,此时我们无法访问到test2中的urls,如何解决,使用include进行路由分发,在主路由中加上:
image.png
此时,我们再去访问网站,可以看见网站给了两个路径:
image.png
此时test2/中有我们之前转移的work和hello两个方法,我们只需要像使用include方法分发前加上路径就可以正常使用:
image.png
image.png

2.传统路由手动路由分发,无需app

手动路由分发可以与app无关。 可以不定义app_name。具体的app_name会专门介绍。
那么现在看不用include方法,手动分发的例子:
上面我们在test1中创建了test2app,为了更好的区分,我将其更改为web名,如果不用include方法进行路由分发,就会变成以下:
urls:
image.png
或者写成以下的:
image.png
这种写法更偏向于列表的形式。
效果:
image.png
总而言之,手动分发是纯粹帮助提取功能的URL,防止重复编写。

3.路由分发的本质

从本质上来说,路由分发是以url对应函数或者元组:
url对应函数:

path('web/wang/', views.hello),

url对应元组:

path('web/requ',    (元素,appname元素,namespance元素)    ),

path('web/',    include("web。urls")    ),  # 查看include 也是元组
path('web/',     ([],None,None)     ),
4.关于name

name是用于单APP的情况,如果是多APP的话,需要为每个app添加单独的namespace,
给一个路由起个名字然后根据名字反向生成URL。纯粹帮助提取功能的URL,防止重复编写。
例如我们讲web的urls三个功能取名name:
image.png
一般可以用到的地方只有两个

a.在视图函数中生成url

例如:
image.png
image.png
那么当我们访问“name”为“w4”的url时,就会反向给我们一个url的结果,运行后如下:
image.png

b.HTML模板

在html中,作为标签来使用,一般作为超链接的标签:

<a href="">演示</a>
c.扩展

那么在之后的学习中,name还可以在你进行权限管理的时候,配合你进行,这样会大大提高你的工作效率。
但有三点需要注意:
1.主路由下+namespace
2.在应用路由+app_name
3.在app_name添加前需要注册app应用(setting.py-insetalled——apps)

5.关于namespace

namespace是Django架构中用于组织URL模式的机制,它可以避免URL冲突并提高代码的可维护性。通过在URL模式中定义app_name属性,并在全局URL配置中使用include函数引用namespace,可以实现URL的分组和命名空间。
一般namespace都是去辅助name使用。例如:
主路由中:
image.png
那么在web这个app中,我们应该在其urls.py的最后加上app_name:
image.png
那么他们的作用是什么呢,在以后某个URL或者视图中反向生成的时候,我们可以这样用:
image.png

6.扩展
a.使用了name和namespace的手动分发

主路由:
image.png
在views中:
image.png
手动分发就不会去找namespace

b.Django admin组件源码

/api/xxxx/xx x1:yy:xx
image.png

c. 如何解决url中最后的/问题

很多时候,我们在访问一些网站时,网址最后都会有个/,那么如果不加/会发生什么?
image.png
301,也就是重定向发生错误,那么该如何解决?
只需在主路由的setting.py加上以下设定:

APPEND_SLASH = False

但是并不建议更改,因为会增加服务器的负担,这里大家仅仅只需要知道解决办法做以了解就好

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在Django中,include函数可以用于将某个url模式文件的路径包含到主url模式文件中,实现路由分发和管理。通过include函数,可以将不同部分的路由分别配置在不同的文件中,使得整个项目结构更加清晰和易于维护。在主url模式文件中,只需引入包含其他路由的文件路径即可。例如:url(r'^users/', include('users.urls')),就将指向"/users/"路径请求的路由指向了内部的users.urls文件。 ### 回答2: Django路由分发是指将网站请求分发给不同的视图函数或者应用程序。在Django中,路由分发可以使用include()函数实现。 include()函数允许将URL模式从其他模块导入到主URLConf中。这样,就可以把路由分发到其他应用程序或模块中去处理。在导入其他模块时,需要使用模块名和应用程序名称来指定路由。 当使用include()函数时,URLConf必须返回一个实例化的URLConf,而不能是一个URL模式。这个实例化的URLConf对象也可以是一个字符串列表,包含其他应用程序中的URL模式名称。 使用include()函数时,需要按照一定的模式来指定URLConf对象的路径。一个通用的格式是:`include(pattern_list, namespace=None)`,其中pattern_list是一个URLConf模块或者URL模式列表,namespace是一个可选的命名空间参数。 在使用include()函数时,需要考虑一些细节问题。首先,应该使用`r''`来表示正则表达式模式,这样可以确保正确的字符转义。其次,在使用namespace命名空间时,应该使用别名来避免重复。最后,在定义URLConf对象时,应该注意匹配所有可能的URL路径,以便覆盖所有的路由请求。 总之,Django路由分发(include)是一个非常灵活和方便的功能,可以帮助我们快速地将网站请求分发给不同的应用程序和模块,从而实现完整的网站架构。 ### 回答3: Django框架是一个基于MTV模式的Web应用程序开发框架,为开发人员提供了诸多便利。其中,路由分发Django框架中重要的一环,负责将请求分配到相应的视图函数中。而include函数在路由分发中发挥着重要作用。 include函数实际上是一种路由分发方式,其作用是将一个应用程序中的URL映射添加到一个项目中。在Django应用程序中,一般情况下需要将所有的URL映射添加到一个名为urls.py的文件中。在这个文件中,我们可以定义Django应用程序中的URL与其相应的视图函数之间的映射关系。 当应用程序中的URL数量增加后,为了更好的管理和维护,我们可以将URL映射按照不同的业务功能模块进行分组。这个时候,include函数就派上用场了。可以在项目中的urls.py文件中使用include函数,将某个应用程序中的urls.py文件引入到项目中。具体操作如下: 1. 在项目的urls.py文件中引入include函数,例如:`from django.urls import include, path` 2. 在项目的urls.py文件中配置一个URL模式,例如:`path('app/', include('myapp.urls'))` 3. 在应用程序中的urls.py文件中配置URL模式 使用include函数可以将URL模式按照不同的业务模块进行划分,减轻代码维护的复杂度。同时,在应用程序中使用include函数可以将应用程序抽象成一个独立的模块,方便进行重用和共享。include函数简化了URL配置的结构,提高了代码的可阅读性和可重用性。 总之,include函数是Django路由分发中非常实用的工具,可以帮助我们更好地组织和管理URL模式,提高开发效率和代码质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不是少爷.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值