一:路由层

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. OSF--网络类型

    ABR:区域边界路由器ASBR:自治区域系统边界路由器区域部署原则:    存在vlink本地网络一定是有问题的.他只是作为一种过度技术,在vlink里无法实现认证! 配置:   [r2-ospf-a ...

  2. 密码学奇妙之旅、02 混合加密系统、AES、RSA标准、Golang代码

    CTR 计数器模式 计数器模式CTR是分组密码模式中的一种.通过将逐次累加的计数器进行加密来生成密钥流的流密码.每次加密时会生成一个不同的值来作为计数器的初始值. 可以事先进行加密.解密的准备. 加密 ...

  3. C#-8 数组

    一 关于数组 数组是由一个变量名称表示的一组同类型的数据元素.数组中的元素通过变量名和方括号索引来访问. int[] intArray = new int[] { 1, 2, 3 }; //声明了一个 ...

  4. 使用 Spring Security 手动验证用户

    1.概述 在这篇快速文章中,我们将重点介绍如何在 Spring Security 和 Spring MVC 中手动验证用户的身份. 2.Spring Security 简单地说,Spring Secu ...

  5. 关于 LOCATE vs LIKE vs INSTR 性能分析

    网上很多流传关于Mysql字符串对比的函数性能说法是  INSTR >> LOCATE >> LIKE 字符串,所以今天我自己测一下看看真假. 这是在字符串较长的情况下测试的结 ...

  6. Kafka之配置信息

    Kafka之配置信息 一.Broker配置信息 属性 默认值 描述 broker.id   必填参数,broker的唯一标识 log.dirs /tmp/kafka-logs Kafka数据存放的目录 ...

  7. 通过openlayers加载dwg格式的CAD图并与互联网地图叠加

    Openlayers介绍 ​ Openlayers是一个基于Javacript开发,免费.开源的前端地图开发库,使用它,可以很容易的开发出WebGIS系统.目前Openlayers支持地图瓦片.矢量数 ...

  8. vulnhub靶场之RED: 1

    准备: 攻击机:虚拟机kali.本机win10. 靶机:RED: 1,地址我这里设置的桥接,,下载地址:https://download.vulnhub.com/red/Red.ova,下载后直接Vi ...

  9. NLP之基于Transformer的句子翻译

    Transformer 目录 Transformer 1.理论 1.1 Model Structure 1.2 Multi-Head Attention & Scaled Dot-Produc ...

  10. iOS开发之自定义日历控件

    前言 日常开发中经常会遇到日期选择,为了方便使用,简单封装了一个日历控件,在此抛砖引玉供大家参考. 效果 功能 支持单选.区间 支持默认选中日期 支持限制月份 支持过去.当前.未来模式 支持frame ...