Django正则URL匹配实现流程解析


Posted in Python onNovember 13, 2020

一、引子

在day17 作业中,我们查看主机详细信息的时候,是通过 在url 中拼接,传参数。urls 中匹配 path("detail/",views.detail)

Django正则URL匹配实现流程解析

这样url 变成类似 http://127.0.0.1:8000/detail/?nid=2 今天我们来学习,类似http://127.0.0.1:8000/detail-3.html 这样的URL

据说,以前我们使用的方式 ,在seo 时候算是动态页面,后面这种方式算静态页面。可能在做搜索优化的时候有好处吧。

二、开搞栗子

忽略掉数据库,先在 views 新建一个用户字典

2.1 动态页面的栗子

views 代码:

info_dic={
  1:{"name":"zhangsan","email":"zhangsan@163.com","age":22},
  2:{"name":"lisi","email":"lisi@163.com","age":27},
  3:{"name":"wangwu","email":"wangwu@163.com","age":29},
  4:{"name":"laoliu","email":"laoliu@163.com","age":30},
  5:{"name":"chenpi","email":"chenpi@163.com","age":32},
}

def index(request):
  return render(request,"index.html",{"info_dic":info_dic})


def detail(request):
  nid=request.GET.get("nid")
  print(nid,type(nid))
  info=info_dic.get(int(nid))
  print(info)
  return render(request,"detail.html",{"info":info})

urls

Django正则URL匹配实现流程解析

前端,index.html,

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  <h1>用户信息</h1>

  <ul>
    {% for k,v in info_dic.items %}
      <li><a target="_blank" href="/detail/?nid={{ k }}" rel="external nofollow" >{{ v.name }}</a></li>
    {% endfor %}

  </ul>
</body>
</html>

前端,detail

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  <h1>用户详细信息</h1>

  <ul>
    <li>name:{{ info.name }}</li>
    <li>email:{{ info.email }}</li>
    <li>age:{{ info.age }}</li>
  </ul>
</body>
</html>

结果:

Django正则URL匹配实现流程解析

Django正则URL匹配实现流程解析

2.2 下面用 正则表达式来 搞URL 匹配,静态页面,

urls

Django正则URL匹配实现流程解析

views ,

直接在函数中传参数,nid 形式参数。不像之前需要自己到 reques.method 中去取

Django正则URL匹配实现流程解析

结果

Django正则URL匹配实现流程解析

上面的栗子中,我们得知参数是通过形参传递的,类似定义函数的形参数,

下面再搞一个栗子验证

Django正则URL匹配实现流程解析

Django正则URL匹配实现流程解析

Django正则URL匹配实现流程解析

Django正则URL匹配实现流程解析

参数位置变换后 ,获取的数值也变了

Django正则URL匹配实现流程解析

三、分组传参

在上面的栗子中,我们知道如果不分组,那么参数就是类似函数的位置参数,靠天吃饭,

很显然,这样不方便我们在实际的使用中去调用。那么使用关键字参数呢,在URL 匹配中就需要分组

下面搞栗子,变换nid,uid 位置之后,打印的结果是一样的。

Django正则URL匹配实现流程解析

位置参数可以在 *arg 中获取,关键字参数可以在 **kwargs 中获取

Django正则URL匹配实现流程解析

四、总结

路由系统:URL

  • 普通url:re_path('^index/',view.index),re_path('^home/',view.Home.as_view())
  • 顺序传参:re_path(r'^detail-(\d+)-(\d+).html/',views.detail),这个用*args接收
  • 关键字传参:re_path(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html/',views.detail),这个用**kwargs接收,推荐使用这个

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Phantomjs抓取渲染JS后的网页(Python代码)
May 13 Python
Python正则表达式匹配中文用法示例
Jan 17 Python
Python中循环引用(import)失败的解决方法
Apr 22 Python
Django项目中包含多个应用时对url的配置方法
May 30 Python
python 多线程串行和并行的实例
Feb 22 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
Apr 25 Python
python实现自动化上线脚本的示例
Jul 01 Python
python函数定义和调用过程详解
Feb 09 Python
opencv 图像滤波(均值,方框,高斯,中值)
Jul 08 Python
python归并排序算法过程实例讲解
Nov 04 Python
Pytorch 图像变换函数集合小结
Feb 01 Python
OpenCV图像变换之傅里叶变换的一些应用
Jul 26 Python
Django框架请求生命周期实现原理
Nov 13 #Python
python在地图上画比例的实例详解
Nov 13 #Python
python语言实现贪吃蛇游戏
Nov 13 #Python
Python使用struct处理二进制(pack和unpack用法)
Nov 12 #Python
python切割图片的示例
Nov 12 #Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
Nov 12 #Python
Django执行源生mysql语句实现过程解析
Nov 12 #Python
You might like
php下把数组保存为文件格式的实例应用
2010/02/08 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
2011/05/07 PHP
解析php扩展php_curl.dll不加载的解决方法
2013/06/26 PHP
php中cookie的使用方法
2014/03/29 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
2015/08/18 PHP
Windows 下安装 swoole 图文教程(php)
2017/06/05 PHP
Aster vs KG BO3 第二场2.18
2021/03/10 DOTA
JavaScript 对象、函数和继承
2009/07/07 Javascript
JSQL SQLProxy 的 php 版本代码
2010/05/05 Javascript
jQuery语法高亮插件支持各种程序源代码语法着色加亮
2013/04/27 Javascript
JavaSript中变量的作用域闭包的深入理解
2014/05/12 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
node.js下when.js 的异步编程实践
2014/12/03 Javascript
jquery专业的导航菜单特效代码分享
2015/08/29 Javascript
js 性能优化之算法和流程控制
2017/02/15 Javascript
Vue.js学习记录之在元素与template中使用v-if指令实例
2017/06/27 Javascript
vue利用v-for嵌套输出多层对象,分别输出到个表的方法
2018/09/07 Javascript
Vue插件之滑动验证码
2019/09/21 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
python实现简单温度转换的方法
2015/03/13 Python
Python基于pygame实现的弹力球效果(附源码)
2015/11/11 Python
django+js+ajax实现刷新页面的方法
2017/05/22 Python
Python序列化基础知识(json/pickle)
2017/10/19 Python
使用GitHub和Python实现持续部署的方法
2019/05/09 Python
Python Web程序搭建简单的Web服务器
2019/07/31 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
css3让div随鼠标移动而抖动起来
2014/02/10 HTML / CSS
中医专业职业生涯规划书范文
2014/01/04 职场文书
希特勒经典演讲稿
2014/05/19 职场文书
军训口号
2014/06/13 职场文书
农林经济管理专业自荐信
2014/09/01 职场文书
2015试用期转正工作总结
2014/12/12 职场文书
2015年班级工作总结范文
2015/04/03 职场文书
Python面试不修改数组找出重复的数字
2022/05/20 Python