一、路由系统基本格式:

urlpatterns = [path( 要匹配的路径(可以是正则表达式), 视图函数, 参数, 别名)]

参数说明:

  • 正则表达式:一个正则表达式字符串
  • 视图函数:一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串。
  • 参数:要传递给视图函数的默认参数(字典形式,)
  • 别名:url反向代理

django的路由系统作用:

使views里面处理数据的视图函数(类)与请求的url建立映射关系。使请求到来之后,根据urls.py里的关系条目,去查找到与请求对应的处理方法,从而返回给客户端http页面数据。

二、正则表达式详解

  • 在python中使用 re_path模块来写正则表达式
from  django.urls  import re_path

正则表达式的格式:r'^xxxx/$'

  • 正则表达式的开始使用“^”表示。
  • 正则表达式的结束使用“$”表示。
  • “r” 元字符串 防止正则表达式中的转义。

一些常用的正则表达

  • [a-zA-Z]表示匹配所有英文字母中的任意一个字母
  • [0-9]表示任意一个数字
  • \d+表示前面的数字,出现一次或者多次
  • [0-9]{4}表示数字需要出现4次

最基础的URL映射

  1. 先从创建的app下的views.py面定义处理数据的函数
  2. 在urls.py里导入views
  3. 在urlpatterns里写入一条url与处理函数的l映射关系
  4. url映射一般是一条正则表达式,“^” 字符串的开始,“$“ 字符串的结束
  5. 当写成”^$“时,不输入任何url时不会在返回黄页,而是返回后面函数里对应的页面。一般这一条会写在url的最后。如:
url(r'^$', views.index),

urls.py 文件

from django.contrib import admin
from django.urls import path,re_path
from demo01 import views
urlpatterns = [re_path(r'^lawang4/$',views.laowang4),#匹配laowang4/路径re_path(r'$',views.laowang5),#匹配空路径 例如: http://127.0.0.1:8000re_path(r'lawang6/',views.laowang6),#不设置结尾,可以匹配多个路径 例如: http://127.0.0.1:8000/ee//eggre_path(r'[a-zA-Z][0-9]/$',views.laowang7)#[a-zA-Z]表示匹配所有英文字母中的任意一个字母
]    #[0-9]表示任意一个数字

views.py 文件

from django.shortcuts import render
#初始 正则
def laowang4(request):return render(request,'laowang4.html')
#匹配空路径
def laowang5(request):return render(request,'laowang5.html')
#匹配多个路径
def laowang6(request):return render(request,'laowang6.html')
#模糊匹配
def laowang7(request):return render(request,'laowang7.html')

三、正则表达式分组及分组命名匹配

1.正则分组匹配:

格式:(正则内容)
正则表达式分组匹配是通过小括号”()”来捕获URL中的值并以位置参数形式传递给对应视图函数的位置参数。

视图函数接受的是内容时字符串类型。

urls.py文件

re_path(r'^laowang8/(\d+)/$',views.laowang8),

views.py文件

def laowang8(request,num):print(num)return render(request,'laowang8.html')

2. 正则分组命名匹配:

分组命名正则表达式组的语法

(?P<name> pattern)

其中:

  • name是组的名称
  • pattern是要匹配的模式(正则内容)。

匹配成功后会将内容以关键词参数传递给对应的是视图函数,因此,视图函数的形参命名必须和正则分组匹配的’<名称>'相同。和先后顺序无关。

捕获的值作为 关键字参数 而不是位置参数传递给视图函数。
urls.py文件

re_path(r'^laowang9/(?P<year>[0-9]{4})/$',views.laowang9),re_path(r'^laowang10/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$',views.laowang10),

views.py文件

def laowang9(request,year):print(year)return render(request,'laowang9.html')def laowang10(request,month,year):print(month)return render(request,'laowang10.html')

四、视图函数中指定默认值

如果匹配成功,则覆盖默认值,使用传递过来的值。
如果不能匹配成功,则使用默认值。
urls.py文件

re_path(r'^laowang11/(?P<year>[0-9]{4})/$',views.laowang11),

views.py文件

def laowang11(request,year='2019'):return render(request,'laowang11.html',{'year':year})

其中 year='2019是指定的默认值

五、传递额外参数给视图函数

路由系统的第三个参数(字典参数)
字典的key必须和视图函数中的形参相同,否则报错
urls.py文件:

re_path(r'^laowang12/(?P<month>[0-9]{2})/$',views.laowang12,{'year':'2019'}),

其中:{'year':'2019'}给的额外参数,值必须是字符串。

views.py文件:

def laowang12(request,year,month):return render(request,'laowang12.html',{'year':year,'month':month})

其中:year必须和字典的key对应。

六、Url反向代理(别名)

  • 解决的问题: 程序中硬编码的问题。

下面就使用反向代理和没有使用反向代理的 区别进行比较:

  1. 当没有使用反向代理的时候:
    urls.py文件:
 re_path(r'^laowang13/$',views.laowang13),re_path(r'^laowang14/$',views.laowang14),

views.py文件:

def laowang13(request):return render(request,'laowang13.html')def laowang14(request):return render(request,'laowang14.html')

laowang13的html.py文件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<a href="/laowang14/">点我14</a>
<br>
  1. 使用反向代理

urls.py文件:

 re_path(r'^laowang13/$',views.laowang13),re_path(r'^laowang141/$',views.laowang14,name='lw14'),

其中:name='lw14'就是反向代理

views.py文件:

def laowang13(request):return render(request,'laowang13.html')def laowang14(request):return render(request,'laowang14.html')

laowang13的html.py文件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
老王13 <br>
<a href="/laowang14/">转跳到laowang14页面</a>
<br>
<a href="{% url 'lw14' %}">转跳到laowang14页面</a>
</body>
</html>

当把re_path(r'^laowang141/$',views.laowang14,name='lw14'),中的laowang14改成laowang141使用反向代理还是可以访问laowang14.html

七、Url反向解析带参数

  • 格式:name=’xxx’
  • 页面中使用反向代理: {%url ‘别名名称’ %}
  • 如果传递参数:{%url ‘别名名称’ 参数1 参数2 … %}
    其中:参数要用字符串:
    urls.py文件:
re_path(r'^laowang13/$',views.laowang13),
re_path(r'^laowang15/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$',views.laowang15,name='lw15'),

views.py文件:

def laowang13(request):return render(request,'laowang14.html')def laowang15(request,year,month):return render(request,'laowang15.html')

laowang13的html.py文件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<a href="/laowang15/2019/11/">跳转到老王15页面</a>
<br>
<a href="{% url 'lw15' '2018' '12' %}">跳转到老王15页面</a>
</body>
</html>


如上图:标出的是解析带参数

django框架——路由系统(正则表达式)相关推荐

  1. django框架--路由系统

    目录 一.路由系统理解 二.路由系统功能划分 三.路由表创建 创建工具 二级路由 路由别名 动态路由及重定向 四.自定义错误页面 五.图示路由系统在框架中的定位 六.路由系统的进阶想法 一.路由系统理 ...

  2. Django之路由系统

    创建APP 一个Django项目可以分为很多个APP,用来隔离不同功能模块的代码. 命令行创建 python manage.py startapp app01 使用PyCharm创建 在下方弹出的命令 ...

  3. Django的路由系统

    Django的路由系统 url配置就像Django所支撑网站的目录.它的本质是url与要为url调用的试图函数之间的映射表. 我们就是以这种方式告诉Django,遇到哪个URL的时候,要应对执行哪个函 ...

  4. Python框架篇之Django(路由系统URL、视图函数views)

    文章目录 一.路由系统(URL) 二.视图函数(views) 一.路由系统(URL) 1.URL配置 (URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用 ...

  5. day64 url用法以及django的路由系统

    此篇博客是以备后查的,用到的时候记得过来查找即可! 路由系统:就是我们的django项目创建的时候自带的那个urls.py 它本身里面是映射的对应关系,一个大的列表里面,一个个元祖,元祖里面是url或 ...

  6. Django框架--路由分配系统

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  7. django框架--中间件系统

    目录 零.参考 一.中间件的基本理解 二.中间件的系统定位 三.中间件的配置 四.中间件的执行流程 五.中间件与装饰器之间的思考 六.中间件的应用场景 七.内置中间件 八.总结 零.参考 https: ...

  8. Python的web框架Django(1):HTTP、简介、静态文件配置、路由系统、视图函数、模板语言、ORM、Ajax、分页器、forms、Cookie、Session、中间件、ModelForm

    1. HTTP协议 1)HTTP请求协议 请求格式 POST(方法) /form/entry(URI) HTTP/1.1(协议版本) HOST:hackr.jp(服务端地址) Connection:k ...

  9. Python学习---Django路由系统【all】

    Django URL (路由系统) Django URL (路由系统): URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映 ...

最新文章

  1. c语言n1=(n2=(n3=0)),计算机二级C语言考试选择题(带答案)
  2. opencv源码解析之(6):hog源码分析
  3. Tomcat 启动时 SecureRandom 非常慢解决办法
  4. rsa python实现_RSA算法python实现
  5. 操作系统实验报告13:线程池简单实现
  6. SubSonic中RecordBaseT.Load(IDataReader dataReader)与LoadAndCloseReader(IDataReader dataReader)的使用区别...
  7. 质数和分解(动态规划)
  8. 摩尔斯电码转换python编码_Morse Code 用Python做个摩斯密码转换器
  9. python globals() 动态函数调用_[Python] 动态函数调用(通过函数名)
  10. 453. Minimum Moves to Equal Array Elements 一次改2个数,变成统一的
  11. PythonAM3_统计量分析
  12. OpenGL ES总结(五)OpenGL 中pipeline机制
  13. linux android交叉编译,【转】搭建arm-linux-gcc交叉编译工具链环境(Android原生(JNI)开发环境搭建)...
  14. UltraISO(制作U盘ISO启动镜像)制作U盘启动盘
  15. 最新教程Instagram如何下载并注册
  16. 内容太干准备好水:项目进度管理S曲线制作方法新探
  17. HTML实现页面跳转
  18. JanusGraph图数据库系统简介
  19. 视觉SLAM总结-本质矩阵E分解
  20. 用 Rust 写一个声控小动画

热门文章

  1. dhcp服务器设置自动,路由器DHCP服务器怎样设置
  2. 设计一个简易模糊查询输入框(上)
  3. 命令行操作Redis,执行SUBSCRIBE命令订阅了一个频道后,如何退出该频道,而不是取消订阅
  4. 怎么免费恢复安卓手机里面删除的照片?删除照片恢复方法!
  5. layui+腾讯地图坐标点选取插件,支持地址关键字模糊/联想搜索、当前城市定位、地址地图标点联动
  6. 颜值与实力齐飞,魔戒Scroll可独立切换AR功能
  7. ubuntu 18.04 右键新建文档
  8. SPSS——非参数检验——Runs游程检验
  9. 强化数智赋能,中陶卫浴路路通软件【卫浴条码系统】正式启动
  10. SNMP常用OID合集