一:路由层

1.路由匹配(错误演示)
url方法第一个参数是正则表达式
1.只要第一个参数正则表达式能够匹配到内容 那么就会立刻停止往下匹配
2.直接执行对应的视图函数
urlpatterns = [
url(r'test',views.test),
url(r'testadd',views.testadd)
]

2.路由匹配错误原因
匹配规则:
从上到下只要正则表达式匹配成功,就不会往下执行
1.所有当路由匹配到第一个正则的时候,就匹配成功了,不会往下执行
3.路由匹配(解决方式1)
你在输入url的时候会默认加斜杠,django内部帮你做到重定向
一次匹配不行,url后面加斜杠再来一次。 url(r'test/', views.test),
url(r'testadd/', views.testadd)
4.settings配置文件控制自动添加斜杠匹配
# settings配置文件内添加(控制django是否自动加斜杠匹配)
APPEND_SLASH = False/True # 默认是True自动加斜杠的

5.url方法第一个参数是正则表达式(正规使用url)
urlpatterns = [
url(r'^admin/', admin.site.urls),
# 首页 默认进去
url(r'^$',views.home),
# 路由匹配
url(r'^test/$',views.test),
url(r'^testadd/$',views.testadd),
# 尾页(了解 后期异常捕获)
url(r'',views.error),
] 解析:
^ : 开头
$ : 结尾

二:无名分组(位置参数)

1.分组的概念
分组: 就是给某一段正则表达式用小括号扩起来
2.无名分组的概念:
无名分组就是将括号内正则表达式匹配到的内容当作位置参数传递给后面的视图函数
3无名分组使用
urls.py
# 会把括号中匹配的数字当成位置参数传给视图函数
url(r'^test/(\d+)/',views.test) views.py
def test(request,xx):
print(xx)
return HttpResponse('test') 正则:
\d+ : 匹配多个任意数字

三:有名分组(关键字参数)

1.什么是有名分组?
可以给正则表达式起一个别名
2.有名分组的概念:
有名分组就是将括号内正则表达式匹配到的内容当作关键字参数传递给后面的视图函数
3.有名分组使用
# 会把括号中匹配的数字当成关键字参数传给视图函数
url(r'^testadd/(?P<year>\d+)',views.testadd) def testadd(request,year):
print(year)
return HttpResponse('testadd')
4.无名有名是否可以混合使用
6.有名分组无名分组是否可以混合使用?
1.利用有名分组和无名分组 我们就可以在调用视图函数之前给函数传递额外的参数
答:无名分组和有名分组不能混合使用 解:但是同一个分组可以使用N多次
7.单个的分组可以使用多次
1.无名分组单个使用多次
url(r'^index/(\d+)/(\d+)/(\d+)/',views.index), 2.有名分组单个使用多次
url(r'^index/(?P<year>\d+)/(?P<age>\d+)/(?P<month>\d+)/',views.index), def index(request,*args,**kwargs):
print(args)
return HttpResponse('index')
正则:
/(\d+)/(\d+)/(\d+)/ :匹配三个无名分组
/(?P<year>\d+)/(?P<age>\d+)/(?P<month>\d+)/ : 匹配三个有名分组

四:反向解析

1.什么是反向解析?
当路由频繁变化的时候,html界面与后端上的连接地址如何做到动态解析?
根据自己设置的一个别名,动态解析出一个结果,该结构可以直接访问对应的url
2.反向解析概念:
通过一些方法得到一个结果 该结果可以直接访问对应的url触发视图函数
实现url路由频繁变化,html界面与后端动态解析连接地址操作步骤:
3.反向解析路由配置
1.先给路由与视图函数起一个别名
url(r'^func_kkk/',views.func,name='ooo') # name='ooo' 起别名
4.前后端反向解析
# 后端视图函数反向解析
3.导入模块reverse
from django.shortcuts import render,HttpResponse,redirect,reverse 4.反向解析 关键字 reverse('ooo') def home(request):
print(reverse('ooo'))
return render(request,'home.html')
# 前端反向解析
5.前端模板文件反向解析
<a href="{% url 'ooo' %}">111</a>

五:无名分组反向解析与有名分组反向解析

1.当路由出现无名有名分组反向解析需要传递额外的参数
2.无名有名分组反向解析,目的就是需要给一个参数,如果有多个就是需要手动的给多个,这多个参数一般情况都是当前操作数据的主键值。
  • 当路由出现无名有名分组反向解析需要传递额外的参数
1.无名分组反向解析
1.路由配置
urlpatterns = [
# 首页
url(r'^$',views.home),
# 无名分组反向解析
url(r'^index/(\d+)/', views.index, name='xx')
]
2.后端反向解析
def index(request, args):
return HttpResponse('index') def home(request):
# 只要正则表达式里面有正则符号反向解析的时候,就需要给一个正则符号能够匹配到的内容
print(reverse('xx', args=(1,)))
# 返回结果 可以访问到url /index/1
return render(request, 'home.html')
3.前端反向解析
{#给个数字 匹配正则\d+#}
<a href="{% url 'xxx' 123 %}"></a>
  • 后端反向解析

  • 前端反向解析

2.有名分组反向解析
1.路由配置
url(r'^func/(?P<year>\d+)/',views.func,name='ooo')
2.前端
{#有名分组反向解析 写法1#}
<a href="{% url 'ooo' year=123 %}">111</a>
{#简便写法 记跟无名一样的操作即可#}
<a href="{% url 'ooo' 123 %}">222</a>
3.后端
# 有名分组反向解析 写法1
print(reverse('ooo',kwargs={'year': 123}))
# 简便的写法 减少脑容量消耗 记跟无名一样的操作即可
print(reverse('ooo',args=(111,)))
  • 后端反向解析

  • 前端反向解析

3.总结
针对无名分组有名分组都可以使用一种(无名反向解析的形式)
反向解析的本质: 就是能够获得一个能够访问名字所对应的视图函数。

Django框架路由层-无名有名分组-无名有名分组反向解析的更多相关文章

  1. Django框架-路由层

    Django框架-路由层 一.URL配置(URLconf) 1.基本格式 from django.conf.urls import url urlpatterns = [ url(正则表达式, vie ...

  2. 052.Python前端Django框架路由层和视图层

    一.路由层(URLconf) 1.1 路由层简单配置 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Dj ...

  3. Django 的路由层URL 分组 路由分发 反向解析

    URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调 ...

  4. 第三章、Django之路由层

    目录 第三章.Django之路由层 一 路由的作用 二 简单的路由配置 三 分组 四 路由分发 五 反向解析 六 名称空间 七 django2.0版的re_path与path 第三章.Django之路 ...

  5. 02-01 Django之路由层

    Django之路由层 一 路由的作用 路由即请求地址与视图函数的映射关系,如果把网站比喻为一本书,那路由就好比是这本书的目录,在Django中路由默认配置在urls.py中,如下图: 二 简单的路由配 ...

  6. Django的路由层和视图层

    一丶Django 的路由层(URLconf) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django ...

  7. Django系列(二):Django的路由层,视图层和模板层

    1.Django的路由层 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:我们就是以这种方式告诉Django,对于客户端发来的某 ...

  8. Django框架-模型层

    Django框架-模型层 一.单表查询之必知必会13条 1.时间字段中的两个关键性参数 create_time = models.DateField() # 年月日 create_time = mod ...

  9. Django框架-模板层

    Django框架-模板层 一.模板语法传值 1.验证是否python所有的数据类型都可以传递到前端 locals()的妙用:该方法虽然好用,但是在某些情况下会造成资源的浪费 结论:整型.浮点型.字符串 ...

  10. Django学习——路由层之路由匹配、无名分组、有名分组、反向解析

    路由层之路由匹配 """路由你可以看成就是出去ip和port之后的地址""" url()方法 1.第一个参数其实是一个正则表达式 2.一旦第 ...

随机推荐

  1. 关于将Azure云上磁盘导出-使用VirtualBox转换成vmdk格式的方法记录

    在工作中,经常会遇到虚拟磁盘文件格式的转换需求,尤其是在虚拟化迁移及云环境迁移到DC的虚拟化环境中 或者中转处理,如最近笔者遇到一个需要将Azure Cloud上的磁盘导出到VMware中,但Azur ...

  2. NOIP2011 提高组 聪明的质监员(二分+前缀和)

    看到这道题,应该都能想到用二分,那问题是怎么去判定呢? 我们考虑用前缀和(a1统计w,a2统计v),枚举每个矿石,,当前判定的值是x,如果该矿石的w>=x,a1[i]=a1[i-1]+1,a2[ ...

  3. Redis 02: redis基础知识 + 5种数据结构 + 基础操作命令

    Redis基础知识 1).测试redis服务的性能: redis-benchmark 2).查看redis服务是否正常运行: ping 如果正常---pong 3).查看redis服务器的统计信息: ...

  4. 京东云开发者|ElasticSearch降本增效常见的方法

    Elasticsearch在db_ranking 的排名又(双叒叕)上升了一位,如图1-1所示;由此可见es在存储领域已经蔚然成风且占有非常重要的地位. 随着Elasticsearch越来越受欢迎,企 ...

  5. PMM实现监控Mysql-MGR

    一.docker安装PMM服务端 1.安装yum配置单元 # 如果已安装,略过此步 yum install -y yum-utils #yum配置单元 2.配置docker阿里云yum源 #配置doc ...

  6. 关于Dockerfile的写法

    Dockerfile是用来自定义构建镜像的文件. Dockerfile: FROM nginx RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/ht ...

  7. mybatis-特殊查询

    特殊SQL的执行 模糊查询 /** * 根据用户名进行模糊查询 * @param username * @return java.util.List<com.atguigu.mybatis.po ...

  8. 开箱即用 yyg-cli(脚手架工具):快速创建 vue3 组件库和vue3 全家桶项目

    1 yyg-cli 是什么 yyg-cli 是优雅哥开发的快速创建 vue3 项目的脚手架.在 npm 上发布了两个月,11月1日进行了大升级,发布 1.1.0 版本:支持创建 vue3 全家桶项目和 ...

  9. Rust Aya 编写 eBPF 程序

    本文地址:https://www.ebpf.top/post/ebpf_rust_aya 1. 前言 Linux 内核 6.1 版本中有一个非常引人注意的变化:引入了对 Rust 编程语言的支持.Ru ...

  10. Go语言核心36讲23

    我在上两篇文章中,详细地讲述了Go语言中的错误处理,并从两个视角为你总结了错误类型.错误值的处理技巧和设计方式. 在本篇,我要给你展示Go语言的另外一种错误处理方式.不过,严格来说,它处理的不是错误, ...