Django( 学习第三部 Django的url路由层)
目录
url路由层
url 路由匹配
注意事项:
- url方法,第一个参数是正则表达式,只要第一个参数能够匹配到内容,就会立刻停止向下匹配,并且直接执行对应的视图函数
- 输入url的时候会默认加斜杠,若没有加Django会做重定向,自动添加一个斜杠再次进行匹配.
- 关闭Django自动添加斜杠进行匹配 APPEND_SLASE = Fales / True 默认为True 自动添加斜杠.
- 有名分组和无名分组不可以混合使用,(有名 分组可以有多个,无名分组也可以有多个,切记俩者不可以混用)
无名分组
- url(r'^text/(\d+)/',views.test)
- def tset(request,xx)
- print(xx)
- return HttpResponse('tset')
无名分组就是将括号内正则表达式匹配到的内容当作位置参数传递给后面的视图函数
有名分组
- url(r'^add/(?P<a>\d+)/',views.test)
- def tset(request,a)
- print(a)
- return HttpResponse('tset')
有名分组就是将括号内正则表达式匹配到的内容当作关键字参数传递给后面的视图函数
反向解析:
通过一些方法得到一个结果,该结果可以直接访问对应的url触发视图函数
- #先给路由与视图函数起一个别名
- url(r'*func_kk/',views.func,name='xxx')
- 前端解析
- < a href = "{% ooo %}">111</a>
- 后端解析
- form django.shortcuts import render,HttpResponse,redirect,reverse
- reverse("ooo")
无名分组的反向解析
- # 无名分组对的反向解析
- url (r'^index/(\d+)/',views.inde,name='ooo')
- 前端解释
- {% url "ooo" 123 %}
- 后端解析
- reverse( 'ooo' ,args=(1,) )
- 这个数字在写代码的时候应该放什么
- 数字一般情况下放的是数据的主键值 数据的编辑和删除
- url(r'^edit/(\d+)/',views.edit,name="ooo")
- def edit(request,edit_id):
- reverse('ooo' ,args=(edit_id,))
- {% for user_obj in user_queryset %}
- <a href= {% url 'ooo' user_obj.id %} >编辑</a>
- {% endfor%}
有名分组的反向解析
- # 有名分组的反向解析
- url(r'^index/(?P<year>\d+)/',views.index,name='ooo')
- 前端解析
- <a href ='{% url 'ooo' year=123 %}'>111</a> #(了解)
- < a href = '{% url "ooo" 123%}'>123</a> #记忆
- 后端解析
- print(reverse("ooo" , kwargs={'yesr':123})) #(了解)
- print( reverse('ooo',args=(111,)))
路由分发
Django1.1版本的路由分发
主路由
- #主路由
- from django.conf.urls import url,include
- 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(r'app02/',include(app02-urls)),
- #方式2(推荐使用)
- url(r'app01/',include('app01.urls')),
- url(r'app02/',include('app02.urls')),
- ]
子路由
- #子路由
- from django.conf.urls import url
- from app01 import views
- urlpatterns = [
- url(r'add/',views.add),
- ]
Django2.2版本的路由分发
(对多个APP中的重名视图函数根据不同的APP进行分发,互不干扰)
主路由
- from django.contrib import admin
- from django.urls import path,include
- urlpatterns = [
- path('admin/', admin.site.urls),
- path('app01/', include("app01.urls")),
- path('app02/', include('app02.urls'))
- ]
#主路由的的re_path中不可以加$符
子路由
- from django.urls import path
- from app01 import views
- urlpatterns = [
- path('func/', views.func)
- ]
名称空间(了解)
(多个应用出现相同的别名时,研究反向解析会不会自动识别应用前缀)
正常情况下的反向解析是没有办法自动识别前缀
主路由
- #主路由
- from django.conf.urls import url,include
- urlpatterns = [
- url(r'admin/',admin.site.urls),
- url(r'app01/',include('app01.urls',namespace='app01')),
- url(r'app02/',include('app02.urls',namespace='app02')),
- ]
子路由
- #子路由
- from django.conf.urls import url
- from app01 import views
- #app01
- urlpatterns = [
- url(r'add/',views.add,name='add'),
- ]
- #app02
- urlpatterns = [
- url(r'add/',views.add,name='add'),
- ]
视图函数中的反向解析
- reverse('app01:add')
- reverse('app01:add')
前端中的反向解析
- {% url "app01:add" %}
- {% url "app02:add" %}
django之间的版本区别
1.x与2.x
区别一
- django 1.x中路由层使用的是url方法
- url()中的第一个参数支持正则
- from django.conf.urls import url
- urlpatterns = [
- url(r'admin/', admin.site.urls),
- url(r'^add/',viwes.add)
- ]
- django 2.x和3.x 中使用的是path方法
- path()中的第一个参数不支持正则,写什么匹配什么
- from django,urls import path,re_path #导入模块,支持正则
- urlpatterns = [
- path('admin/',admin.site.urls),
- path('add/',viwes.add)
re_path(r'^add/',views.add) #支持正则- ]
区别二
path 内部默认支持五种转换器 (支持自定义转换器)
str int slug uuid path


- path('index/<int:id>/',index)
- 视图函数
- def index(request,id):
- print(id,type(id))
- return HttpResponse('index')
Django( 学习第三部 Django的url路由层)的更多相关文章
- Django学习笔记之Django中间件
准备 我们在前面的课程中已经学会了给视图函数加装饰器来判断是用户是否登录,把没有登录的用户请求跳转到登录页面.我们通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可能也需要加上装饰 ...
- Django学习之七:Django 中间件
目录 Django 中间件 自定义中间件 - - - 大体两种方式 将中间件移除 实例 中间件加载源码阅读 总结 Django 中间件 Tips: 更新日志: 2019.01.31 更新django中 ...
- Django框架之第三篇(路由层)--有名/无名分组、反向解析、路由分发、名称空间、伪静态
一.Django请求生命周期 二.路由层 urls.py url()方法 第一个参数其实就是一个正则表达式,一旦前面的正则匹配到了内容,就不会再往下继续匹配,而是直接执行对应的视图函数. djang ...
- Django学习之四:Django Model模块
目录 Django Model 模型 MODEL需要在脑子里记住的基础概念 区分清楚,必须不能混淆的 class Meta 内嵌元数据定义类 简单model创建实例 数据源配置 接着通过models在 ...
- Django 学习第一天——django 基本介绍和环境搭建
web 应用设计模式(MTV MVC): MTV: M:models 模型:负责业务数据对象与数据库对象: T:templates 模板:负责如何把数据展示给用户: V:views 视图:负责业务逻辑 ...
- Django学习之六:Django 常用模块导入记忆
Django 常用模块导入记忆 django相关 1. urls相关操作 from django.urls import path, re_path, include from django.urls ...
- Django学习笔记之Django Form表单
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...
- python之Django学习笔记(三)---URL调度/URL路由
在django中,用户发起url请求消息首先到工程的urls.py中查找是否有匹配的url路径 刚创建好的工程中urls.py只有下面几行代码: from django.contrib import ...
- Django学习笔记之Django的url反向解析
0x00 URL反向解析和三种不同的反向解析方式 Django中提供了关于URL的映射的解决方案,可以做两个方向的使用: 1.普通解析过程:由客户端的浏览器发起一个url请求,Django根据URL解 ...
随机推荐
- 口罩预约管理系统——系统网站实现(前端+PHP+MySQL)
口罩预约管理系统网站实现 一.前言 二.系统登陆逻辑及界面实现 三.用户模块 1.用户预约系统界面 2.用户查看我的订单界面 3.用户修改预约信息 四.管理员模块 1.管理员登陆界面 2.查看用户预约 ...
- 【转】Postgres SQL sort 操作性能调优
这篇文章将以实战的方式结合笔者在项目中真实遇到的情况来讲解.说到SQL,大家可能会遇到一些写法稍微复杂的写法.比如SQL中遇到的有聚合函数sum等,也有遇到使用group by / order by的 ...
- 看动画学算法之:排序-count排序
目录 简介 count排序的例子 count排序的java实现 count排序的第二种方法 count排序的时间复杂度 简介 今天我们介绍一种不需要作比较就能排序的算法:count排序. count排 ...
- Docker镜像发布到阿里云
登录阿里云Docker Registry $ sudo docker login --username=xxx@xxx.com registry.cn-hangzhou.aliyuncs.com 从R ...
- 分布式服务(RPC)+分布式消息队列(MQ)面试题精选
分布式系统(distributed system)是建立在网络之上的软件系统.正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性.因此,网络和分布式系统之间的区别更多的在于高层软件(特别是 ...
- powerDesiger的学习
一:简介 二:建立物理模型(正向工程) 1.创建 (1) file->new Model创建需要的物理模型,设置使用的数据库. 2.物理模型的数据库设计 (1)一个物理模型中可以有好几张数据库表 ...
- ios7.1发布企业证书测试包的问题
关于升级了ios7.1之后发布企业版证书的测试包不能下载的问题,这个苹果也挺坑的,什么都不说,也不警告一下,直接就不能用了 用xcode的organizer里面的console里发现安装的时候提示这个 ...
- matplotlib绘图教程,设置标签与图例
大家好,欢迎大家阅读周四数据处理专题,我们继续介绍matplotlib作图工具. 在上一篇文章当中我们介绍了matplotlib这个包当中颜色.标记和线条这三种画图的设置,今天我们同样也介绍三种新的设 ...
- Python3基础——递归
递归函数 如果一个函数在内部调用自身本身,这个函数就是递归函数. 递归函数的优点是定义简单,逻辑清晰.理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰. 使用递归函数需要注意防止栈 ...
- matlab中的qr函数
转自:https://blog.csdn.net/qq278672818/article/details/62038630 实数矩阵A的QR分解是把A分解为 A = QR 这里的Q是正交矩阵(意味着Q ...