一:路由层

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. k8s上安装安装 Ingress Controller &卸载

    在 master 节点上执行 nginx-ingress.yaml文件内容 # 如果打算用于生产环境,请参考 https://github.com/nginxinc/kubernetes-ingres ...

  2. PTA 乙级解题笔记 1001 害死人不偿命的(3n+1)猜想

    卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 (3n+1) 砍掉一半.这样一直反复砍下去,最后一定在某一步得到 n=1.卡拉兹在 1950 ...

  3. Linux+Wine玩火影忍者究极风暴3指南

    如果你的系统没有Wine先装Wine,Wine在各大发行版的源都能找到.记住32位和64位的Wine都要装 去https://www.playonlinux.com/wine/binaries/pho ...

  4. 第一个Spring Boot的MVC程序

    最近在学习Spring Boot,记录一下学习过程!!!! Spring Boot中的MVC:M(model模型),C(controller控制器),V(view视图) model:是Java的实体B ...

  5. Sql Server 数据库分页存储过程书写

    create proc 存储过程名称( @page int, //pageindex @rows int, //pagesize @rowCount int out)as begin--定义字符串变量 ...

  6. .Net Core&RabbitMQ限制循环消费

    前言 当消费者端接收消息处理业务时,如果出现异常或是拒收消息将消息又变更为等待投递再次推送给消费者,这样一来,则形成循环的条件. 循环场景 生产者发送100条消息到RabbitMQ中,消费者设定读取到 ...

  7. 【Virt.Contest】CF1321(div.2)

    第一次打虚拟赛. CF 传送门 T1:Contest for Robots 统计 \(r[i]=1\) 且 \(b[i]=0\) 的位数 \(t1\) 和 \(r[i]=0\) 且 \(b[i]=1\ ...

  8. Python的几种lambda排序方法

    1.对单个变量进行排序 #lst = [[5,8],[5,3],[3,1]] lst.sort(key = lambda x : x[1]) #lst = [[3,1],[5,8],[5,3]] 以元 ...

  9. Flask(一)

    pip install flask 依赖wsgi flask框架是基于werkzegu的wsgi实现,flask没有自己的wsgi 用户一旦请求,就会调用app.__call__方法 flask 路由 ...

  10. 自学 TypeScript 第三天 使用webpack打包 TS 代码

    前言: 大家好啊,昨天介绍了 TS 编译器的配置,但在我们实际开发当中直接使用 TS 编译器去编译代码的情况会有,但没有很多,因为我们在开发大型项目的时候,一般我们都会用到打包工具,也不可能脱离打包工 ...