Django框架路由分发-名称空间
2024-09-07 05:59:52
目录
一:路由分发
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')
]
最新文章
- laravel Input Cokkie 的各种方法 超实用!!!
- igraph安装(R/Python)
- consul笔记
- web.xml相关知识摘录整理
- 设置Session的超时时间
- Android Density(密度)
- 制作font-icon有感
- magnific-popup 一款优秀, 多种功能于一身的弹出层jQuery插件.
- poj 3182 The Grove
- 经典排序算法及python实现
- 指令汇B新闻客户端开发(三) 下拉刷新
- 控制结构(11): Continuation passing style(CPS)
- 设置redis服务开机自启动
- conda环境复制
- tornado--初识tornado
- myeclipse及Eclipse中.classpath、.project、.settings、.mymetadata(myeclipse特有)介绍
- 05. .stop、.prevent、.capture、.self、.once、
- unity3d 代码动态添加,修改BoxCollider2D
- 数据库新秀 postgresql vs mongo 性能PK
- 笔记:pycharm 快捷键
热门文章
- dubbo接口方法重载且入参未显式指定序列化id导致ClassCastException分析
- 2022 跳槽涨薪必不可少面试通关宝典 —— css 篇
- [USB波形分析] 全速USB波形数据分析(一)
- 【记录一个问题】linux下使用opencv中的UMat,性能并未提升,反而略有下降
- 工作自动化,替代手工操作,使用python操作MFC、windows程序
- Gradle下载安装教程
- 解决Post请求中文乱码问题
- IoC容器-Bean管理(bean生命周期)
- CTFSHOW-SSRF篇
- python使用range()函数创建数字列表list