Django框架路由层-无名有名分组-无名有名分组反向解析
一:路由层
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框架路由层-无名有名分组-无名有名分组反向解析的更多相关文章
- Django框架-路由层
Django框架-路由层 一.URL配置(URLconf) 1.基本格式 from django.conf.urls import url urlpatterns = [ url(正则表达式, vie ...
- 052.Python前端Django框架路由层和视图层
一.路由层(URLconf) 1.1 路由层简单配置 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Dj ...
- Django 的路由层URL 分组 路由分发 反向解析
URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调 ...
- 第三章、Django之路由层
目录 第三章.Django之路由层 一 路由的作用 二 简单的路由配置 三 分组 四 路由分发 五 反向解析 六 名称空间 七 django2.0版的re_path与path 第三章.Django之路 ...
- 02-01 Django之路由层
Django之路由层 一 路由的作用 路由即请求地址与视图函数的映射关系,如果把网站比喻为一本书,那路由就好比是这本书的目录,在Django中路由默认配置在urls.py中,如下图: 二 简单的路由配 ...
- Django的路由层和视图层
一丶Django 的路由层(URLconf) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django ...
- Django系列(二):Django的路由层,视图层和模板层
1.Django的路由层 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:我们就是以这种方式告诉Django,对于客户端发来的某 ...
- Django框架-模型层
Django框架-模型层 一.单表查询之必知必会13条 1.时间字段中的两个关键性参数 create_time = models.DateField() # 年月日 create_time = mod ...
- Django框架-模板层
Django框架-模板层 一.模板语法传值 1.验证是否python所有的数据类型都可以传递到前端 locals()的妙用:该方法虽然好用,但是在某些情况下会造成资源的浪费 结论:整型.浮点型.字符串 ...
- Django学习——路由层之路由匹配、无名分组、有名分组、反向解析
路由层之路由匹配 """路由你可以看成就是出去ip和port之后的地址""" url()方法 1.第一个参数其实是一个正则表达式 2.一旦第 ...
随机推荐
- Prometheus自身的监控告警规则
1.先在 Prometheus 主程序目录下创建rules目录,然后在该目录下创建 prometheus-test.yml文件,内容如下: 内容很多,可以根据实际情况进行调整. 规则参考网址:http ...
- 如何通过执行SQL为低代码项目提速?
见多了SQL为代码开发提速,那么当低代码遇到SQL会擦出怎样的火花呢?本文将低代码和SQL结合进行介绍,让大家了解如何通过执行SQL为低代码项目提速. 背景 自从计算机诞生的一刻起,如何让计算机能够按 ...
- Spring 深入——IoC 容器 01
IoC容器的实现学习--01 目录 IoC容器的实现学习--01 简介 IoC 容器系列的设计与实现:BeanFactory 和 ApplicationContext BeanFactory load ...
- springboot H2 linux下搭建使用
这次研究是H2数据库了,关键还是再Linux下进行搭建部署的,被这个数据库快弄死了弄了4天时间,现在大致可以用了,还有些细节需要修正. 我这边使用的是springboot集成模式.直接使用代码启停方式 ...
- 学生管理系统(C语言简单实现)
仅供借鉴.仅供借鉴.仅供借鉴(整理了一下大一C语言每个章节的练习题.没得题目.只有程序了) 文章目录 1 .实训名称 2.实训目的及要求 3. 源码 4.实验小结 1 .实训名称 实训12:文件 2. ...
- 二进制安装Dokcer
写在前边 考虑到很多生产环境是内网,不允许外网访问的.恰好我司正是这种场景,写一篇二进制方式安装Docker的教程,用来帮助实施同事解决容器部署的第一个难关. 本文将以二进制安装方式,在CentOS7 ...
- DQL-模糊查询
DQL-模糊查询 模糊查询即模糊检索,是指搜索系统自动按照用户输入关键词的同义词进行模糊检索,从而得出较多的检索结果.与之相反的是"精准搜索".模糊检索也可以说是同义词检索,这里的 ...
- Linux正则表达式与grep
bash是什么 bash是一个命令处理器,运行在文本窗口中,并能执行用户直接输入的命令 bash还能从文件中读取linxu命令,称之为脚本 bash支持通配符.管道.命令替换.条件判断等逻辑控制语句 ...
- apijson 初探
apijson 初探 本文试着用 5W1H 方式切入,试图快速建立自己对 apijson 的整体认知,所以这不是一趟快速入门的 demo 之旅,而是显得比较务虚的探索式知识体系整合过程. 持续更新中. ...
- Pandas常用方法
数据处理很多需要用到pandas,有两个基本类型:Series表示一维数据,DataFrame表示多维.以下是一些常用方法的整理: pandas.Series 创建 Series pandas.Ser ...