一:路由分发

1.路由分发简介
1.django是专注于开发应用的,当一个django项目特别庞大的时候,所有的路由与视图函数映射关系全部写在项目名下urls.py(总路由层),很明显太冗余也不便于管理,这个时候也可以利用路由分发来减轻总路由的压力。

2.django的每一个应用(app)都可以有自己独立的urls.py路由器,static文件夹,templates文件夹。

3.基于上述特点,使用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 views urlpatterns = [
url(r'^reg/',views.reg)
] # app02 urls.py
from django.conf.urls import url
from app02 import views urlpatterns = [
url(r'^reg/',views.reg)
]

二:名称空间

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' %}

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')
]

最新文章

  1. laravel Input Cokkie 的各种方法 超实用!!!
  2. igraph安装(R/Python)
  3. consul笔记
  4. web.xml相关知识摘录整理
  5. 设置Session的超时时间
  6. Android Density(密度)
  7. 制作font-icon有感
  8. magnific-popup 一款优秀, 多种功能于一身的弹出层jQuery插件.
  9. poj 3182 The Grove
  10. 经典排序算法及python实现
  11. 指令汇B新闻客户端开发(三) 下拉刷新
  12. 控制结构(11): Continuation passing style(CPS)
  13. 设置redis服务开机自启动
  14. conda环境复制
  15. tornado--初识tornado
  16. myeclipse及Eclipse中.classpath、.project、.settings、.mymetadata(myeclipse特有)介绍
  17. 05. .stop、.prevent、.capture、.self、.once、
  18. unity3d 代码动态添加,修改BoxCollider2D
  19. 数据库新秀 postgresql vs mongo 性能PK
  20. 笔记:pycharm 快捷键

热门文章

  1. dubbo接口方法重载且入参未显式指定序列化id导致ClassCastException分析
  2. 2022 跳槽涨薪必不可少面试通关宝典 —— css 篇
  3. [USB波形分析] 全速USB波形数据分析(一)
  4. 【记录一个问题】linux下使用opencv中的UMat,性能并未提升,反而略有下降
  5. 工作自动化,替代手工操作,使用python操作MFC、windows程序
  6. Gradle下载安装教程
  7. 解决Post请求中文乱码问题
  8. IoC容器-Bean管理(bean生命周期)
  9. CTFSHOW-SSRF篇
  10. python使用range()函数创建数字列表list