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 相关文章推荐
python缩进区别分析
Feb 15 Python
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
May 23 Python
Python基于pygame实现的弹力球效果(附源码)
Nov 11 Python
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
Jul 12 Python
python3中dict(字典)的使用方法示例
Mar 22 Python
python+selenium实现登录账户后自动点击的示例
Dec 22 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
Jun 28 Python
python实现逐个读取txt字符并修改
Dec 24 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
Jun 26 Python
Django 全局的static和templates的使用详解
Jul 19 Python
PyTorch中的padding(边缘填充)操作方式
Jan 03 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
Jan 29 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制作静态网站的模板框架(四)
2006/10/09 PHP
支持php4、php5的mysql数据库操作类
2008/01/10 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
2014/07/24 PHP
PHP字符串word末字符实现大小写互换的方法
2014/11/10 PHP
php计算两个文件相对路径的方法
2015/03/14 PHP
select多选 multiple的使用示例
2014/06/16 Javascript
js Calender控件使用详解
2015/01/05 Javascript
使用jquery操作session方法分享
2015/01/22 Javascript
使用Node.js实现HTTP 206内容分片的教程
2015/06/23 Javascript
基于node实现websocket协议
2016/04/25 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
jQuery simpleModal插件的使用介绍
2016/08/30 Javascript
JavaScript制作弹出层效果
2016/12/02 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
详谈js中标准for循环与foreach(for in)的区别
2017/11/02 Javascript
详解webpack模块化管理和打包工具
2018/04/21 Javascript
vue+element-ui+axios实现图片上传
2019/08/20 Javascript
Layui弹出层 加载 做编辑页面的方法
2019/09/16 Javascript
Centos7 安装Node.js10以上版本的方法步骤
2019/10/15 Javascript
vue在线动态切换主题色方案
2020/03/26 Javascript
Angular利用HTTP POST下载流文件的步骤记录
2020/07/26 Javascript
基于vue hash模式微信分享#号的解决
2020/09/07 Javascript
解决新建一个vue项目过程中遇到的问题
2020/10/22 Javascript
Python random模块(获取随机数)常用方法和使用例子
2014/05/13 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
用python制作游戏外挂
2018/01/04 Python
python map比for循环快在哪
2020/09/21 Python
解释下面关于J2EE的名词
2013/11/15 面试题
大学生如何写自荐信
2014/01/08 职场文书
大家访活动实施方案
2014/03/10 职场文书
年终晚会主持词
2014/03/25 职场文书
期中考试复习计划
2015/01/19 职场文书
车辆管理制度范本
2015/08/05 职场文书
2016年七夕爱情寄语
2015/12/04 职场文书
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python
Java界面编程实现界面跳转
2022/06/16 Java/Android