Django框架中的路由分发

1.路由分发的价值和意义

有利于分组开发
因为在一个Django项目中可以有多个应用,而每个应用又可以有自己的urls.py,templates.py,views.py文件夹,这就非常有利于开发人员分组开发,最终只需要将各自的代码汇总到一个Django项目中即可,这时候录用分发就起了非常重要的作用。

便于代码维护
当一个django项目中的url特别多 总路由urls.py代码非常冗余不好维护的时候,这个时候就可以利用路由分发来减轻总路由的压力。

2.如何实现路由分发

实现路由分发的方式很简单,主要分为两步,一步是在项目下的urls.py书写,一步是在应用下面的url书写子路由,下面就来详细介绍这两个部分
(1) 项目总路由的编写

# 方法1(推荐写法)
from django.conf.urls import url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^app01/', include(app01.urls)),
    url(r'^app02/', include(app02.urls)),
]

# 方法2
from django.conf.urls import url
from app01 import urls as app01_urls
from app02 import urls as app02_urls

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^app01/', include(app01_urls)), # 当url前缀是app01开头 全部交给app01处理
    url(r'^app01/', include(app02_urls))  # 当url前缀是app01开头 全部交给app01处理
]
'''重点:总路由里面的url千万不能加$结尾,不然后面应用的路由就匹配不到了'''

(2) 应用子路由的编写

from django.conf.urls import url
from app01 import views

urlpatterns = [
    url('^home/', views.home) # 同无总路由时的写法相同
]

3.名称空间

由于多人开发不同的应用,可能会出现应用路由与函数起别名出现重复的情况,这个时候reverse反向解析是没有办法识别该别名是属于哪个应用的,所以这时候就涉及到名称空间的问题,可以在路由分发时加一个namespace='应用名'

# 方法1(推荐写法)
from django.conf.urls import url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^app01/', include(app01.urls), namespace='app01'),
    url(r'^app02/', include(app02.urls), namespace='app02'),
]

# 如果设置了以上配置,再使用反向解析时,系统就会自动提示 app01:别名,app02:别名……

但是还有中方法不需要使用名称空间也能达到区分的效果,就是在对路由与视图函数起别名时,在别名前面加上相应的应用的名字就可以达到区分的效果。

posted @ 2022-02-09 17:16  recordlife  阅读(90)  评论(0编辑  收藏  举报