Django框架路由分发-名称空间


目录

  • 一:路由分发
      • 1.路由分发简介
      • 2.总路由分发配置
      • 3.总路由终极配置(不需要导应用路由,直接点应用即可)
      • 4.子路由配置
  • 二:名称空间
      • 1.名称空间应用场景
      • 3.解决方式二>>>:别名不能冲突(加上自己应用名作为前缀)

一:路由分发 1.路由分发简介
1.django是专注于开发应用的,当一个django项目特别庞大的时候,所有的路由与视图函数映射关系全部写在项目名下urls.py(总路由层),很明显太冗余也不便于管理,这个时候也可以利用路由分发来减轻总路由的压力。2.django的每一个应用(app)都可以有自己独立的urls.py路由器,static文件夹,templates文件夹。3.基于上述特点,使用django做分组开发非常的简便。每个人只需要写自己的应用即可,互不干扰。最后由组长统一汇总到一个空的django项目中然后使用路由分发将多个应用关联在一起,即可完成大项目的拼接。

Django框架路由分发-名称空间
文章图片

  • 路由分发解决的就是项目的总路由匹配关系过多的情况
  • 【Django框架路由分发-名称空间】利用路由分发之后 总路由不再干路由与视图函数的直接对应关系
  • 总路由而是做一个分发处理(识别当前url是属于那个应用下的 直接分发对应的应用去处理)
  • 请求来了之后 总路由不做对应关系 只询问你要访问哪个app的功能 然后将请求转发给对应的app去处理
  • 提前创建好 应用app01 应用app02 然后记得注册
2.总路由分发配置
# 1.需要导入一个include路由分发模块 from django.conf.urls import url,include# 2.导入子路由的uls(重名问题 起别名) from app01 import urls as app01_urls from app02 import urls as app02_urls urlpatterns = [ url(r'^admin/', admin.site.urls), # 1.路由分发 url(r'^app01/',include(app01_urls)),# 只要url前缀是app01开头 全部交给app01处理 url(r'^app02/',include(app02_urls))# 只要url前缀是app02开头 全部交给app02处理 ]

3.总路由终极配置(不需要导应用路由,直接点应用即可)
  • 不需要导应用路由,直接点应用即可
# 1.需要导入一个include路由分发模块 from django.conf.urls import url,include# 总路由分发 简便(推荐) urlpatterns = [ # 路由分发终极写法 简便 url(r'^app01/', include('app01.urls')), url(r'^app02/', include('app02.urls')), ]

4.子路由配置
# 子路由 # app01 urls.py from django.conf.urls import url from app01 import viewsurlpatterns = [ url(r'^reg/',views.reg) ]# app02 urls.py from django.conf.urls import url from app02 import viewsurlpatterns = [ url(r'^reg/',views.reg) ]

Django框架路由分发-名称空间
文章图片

二:名称空间 1.名称空间应用场景
当多个应用出现了相同的别名 我们研究反向解析会不会自动识别应用前缀 反向解析:正常情况下的反向解析是没有办法自动识别前缀的

2.解决 方式一>>>:名称空间
# 1.总路由增加一个名称空间 url(r'^app01/',include('app01.urls',namespace='app01')), # 创建名称空间app01 url(r'^app02/',include('app02.urls',namespace='app02'))# 创建名称空间app02

# 2.子路由app01 urlpatterns = [ url(r'^reg/',views.reg,name='reg') ] # 后端 def reg(request): print(reverse('app01:reg')) return HttpResponse('app01: reg')# 前端 {% url 'app01:reg' %}

# 3.子路由app02 urlpatterns = [ url(r'^reg/',views.reg,name='reg') ]# 后端 def reg(request): print(reverse('app02:reg')) return HttpResponse('app02: reg') # 前端 {% url 'app02:reg' %}

Django框架路由分发-名称空间
文章图片

3.解决方式二>>>:别名不能冲突(加上自己应用名作为前缀)
1.其实只要保证名字不冲突 就没有必要使用名称空间2.解决方法 一般情况下 有多个app的时候我们在起别名的时候会加上app的前缀 这样的话就能够确保多个app之间名字不冲突的问题

# 1.子路由# app01 urlpatterns = [ url(r'^reg/',views.reg,name='app01_reg') ]# app02 urlpatterns = [ url(r'^reg/',views.reg,name='app02_reg') ]

    推荐阅读