django框架——路由系统(正则表达式)
一、路由系统基本格式:
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映射
- 先从创建的app下的views.py面定义处理数据的函数
- 在urls.py里导入views
- 在urlpatterns里写入一条url与处理函数的l映射关系
- url映射一般是一条正则表达式,“^” 字符串的开始,“$“ 字符串的结束
- 当写成”^$“时,不输入任何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反向代理(别名)
- 解决的问题: 程序中硬编码的问题。
下面就使用反向代理和没有使用反向代理的 区别进行比较:
- 当没有使用反向代理的时候:
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>
- 使用反向代理
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框架——路由系统(正则表达式)相关推荐
- django框架--路由系统
目录 一.路由系统理解 二.路由系统功能划分 三.路由表创建 创建工具 二级路由 路由别名 动态路由及重定向 四.自定义错误页面 五.图示路由系统在框架中的定位 六.路由系统的进阶想法 一.路由系统理 ...
- Django之路由系统
创建APP 一个Django项目可以分为很多个APP,用来隔离不同功能模块的代码. 命令行创建 python manage.py startapp app01 使用PyCharm创建 在下方弹出的命令 ...
- Django的路由系统
Django的路由系统 url配置就像Django所支撑网站的目录.它的本质是url与要为url调用的试图函数之间的映射表. 我们就是以这种方式告诉Django,遇到哪个URL的时候,要应对执行哪个函 ...
- Python框架篇之Django(路由系统URL、视图函数views)
文章目录 一.路由系统(URL) 二.视图函数(views) 一.路由系统(URL) 1.URL配置 (URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用 ...
- day64 url用法以及django的路由系统
此篇博客是以备后查的,用到的时候记得过来查找即可! 路由系统:就是我们的django项目创建的时候自带的那个urls.py 它本身里面是映射的对应关系,一个大的列表里面,一个个元祖,元祖里面是url或 ...
- Django框架--路由分配系统
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...
- django框架--中间件系统
目录 零.参考 一.中间件的基本理解 二.中间件的系统定位 三.中间件的配置 四.中间件的执行流程 五.中间件与装饰器之间的思考 六.中间件的应用场景 七.内置中间件 八.总结 零.参考 https: ...
- 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 ...
- Python学习---Django路由系统【all】
Django URL (路由系统) Django URL (路由系统): URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映 ...
最新文章
- c语言n1=(n2=(n3=0)),计算机二级C语言考试选择题(带答案)
- opencv源码解析之(6):hog源码分析
- Tomcat 启动时 SecureRandom 非常慢解决办法
- rsa python实现_RSA算法python实现
- 操作系统实验报告13:线程池简单实现
- SubSonic中RecordBaseT.Load(IDataReader dataReader)与LoadAndCloseReader(IDataReader dataReader)的使用区别...
- 质数和分解(动态规划)
- 摩尔斯电码转换python编码_Morse Code 用Python做个摩斯密码转换器
- python globals() 动态函数调用_[Python] 动态函数调用(通过函数名)
- 453. Minimum Moves to Equal Array Elements 一次改2个数,变成统一的
- PythonAM3_统计量分析
- OpenGL ES总结(五)OpenGL 中pipeline机制
- linux android交叉编译,【转】搭建arm-linux-gcc交叉编译工具链环境(Android原生(JNI)开发环境搭建)...
- UltraISO(制作U盘ISO启动镜像)制作U盘启动盘
- 最新教程Instagram如何下载并注册
- 内容太干准备好水:项目进度管理S曲线制作方法新探
- HTML实现页面跳转
- JanusGraph图数据库系统简介
- 视觉SLAM总结-本质矩阵E分解
- 用 Rust 写一个声控小动画
热门文章
- dhcp服务器设置自动,路由器DHCP服务器怎样设置
- 设计一个简易模糊查询输入框(上)
- 命令行操作Redis,执行SUBSCRIBE命令订阅了一个频道后,如何退出该频道,而不是取消订阅
- 怎么免费恢复安卓手机里面删除的照片?删除照片恢复方法!
- layui+腾讯地图坐标点选取插件,支持地址关键字模糊/联想搜索、当前城市定位、地址地图标点联动
- 颜值与实力齐飞,魔戒Scroll可独立切换AR功能
- ubuntu 18.04 右键新建文档
- SPSS——非参数检验——Runs游程检验
- 强化数智赋能,中陶卫浴路路通软件【卫浴条码系统】正式启动
- SNMP常用OID合集