Django框架路由分发-名称空间
目录
- 一:路由分发
-
- 1.路由分发简介
- 2.总路由分发配置
- 3.总路由终极配置(不需要导应用路由,直接点应用即可)
- 4.子路由配置
-
- 二:名称空间
-
- 1.名称空间应用场景
- 3.解决方式二>>>:别名不能冲突(加上自己应用名作为前缀)
-
一:路由分发 1.路由分发简介
1.django是专注于开发应用的,当一个django项目特别庞大的时候,所有的路由与视图函数映射关系全部写在项目名下urls.py(总路由层),很明显太冗余也不便于管理,这个时候也可以利用路由分发来减轻总路由的压力。2.django的每一个应用(app)都可以有自己独立的urls.py路由器,static文件夹,templates文件夹。3.基于上述特点,使用django做分组开发非常的简便。每个人只需要写自己的应用即可,互不干扰。最后由组长统一汇总到一个空的django项目中然后使用路由分发将多个应用关联在一起,即可完成大项目的拼接。
文章图片
- 路由分发解决的就是项目的总路由匹配关系过多的情况
- 【Django框架路由分发-名称空间】利用路由分发之后 总路由不再干路由与视图函数的直接对应关系
- 总路由而是做一个分发处理(识别当前url是属于那个应用下的 直接分发对应的应用去处理)
- 请求来了之后 总路由不做对应关系 只询问你要访问哪个app的功能 然后将请求转发给对应的app去处理
- 提前创建好 应用app01 应用app02 然后记得注册
# 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)
]
文章图片
二:名称空间 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')
]
推荐阅读
- ssm框架项目|ssm项目(商城管理系统)-- 完整
- WPF路由事件中的三种策略介绍
- WPF自定义路由事件
- 产品经理(「点这里,我要跳到任何我想跳的页面」—— 解耦提效神器「统跳路由」)
- python|python api测试框架 github_GitHub - tilics/jiekou-python3: 接口自动化测试框架——python版,支持HTTP,dubbo协议接口...
- mybatis框架(上)(主流程分析)
- 神奇!这款|神奇!这款 Vue 后台框架居然不用手动配置路由
- 大数据相关框架|Hadoop生态圈之即席查询工具Kylin
- 大数据|大数据计算框架与平台--深入浅出分析
- BigData|Hadoop深入浅出 ——三大组件HDFS、MapReduce、Yarn框架结构的深入解析式地详细学习【建议收藏!!!】