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 相关文章推荐
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
Mar 16 Python
python实现定时自动备份文件到其他主机的实例代码
Feb 23 Python
Python列表生成式与生成器操作示例
Aug 01 Python
Python中创建二维数组
Oct 17 Python
python实现名片管理系统
Nov 29 Python
python之信息加密题目详解
Jun 26 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
Jan 05 Python
OpenCV图片漫画效果的实现示例
Aug 18 Python
详解python算法常用技巧与内置库
Oct 17 Python
Python中Qslider控件实操详解
Feb 20 Python
Python Matplotlib绘制条形图的全过程
Oct 24 Python
Python帮你解决手机qq微信内存占用太多问题
Feb 15 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远程连接MYSQL数据库非常慢的解决方法
2008/07/05 PHP
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
ThinkPHP5框架缓存查询操作分析
2018/05/30 PHP
RR vs IO BO3 第一场2.13
2021/03/10 DOTA
Javascript &amp; DHTML 实例编程(教程)基础知识
2007/06/02 Javascript
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
jQuery 获取对象 定位子对象
2010/05/31 Javascript
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
js动态生成指定行数的表格
2013/07/11 Javascript
js二维数组排序的简单示例代码
2014/01/24 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
用javascript实现自动输出网页文本
2015/07/30 Javascript
JavaScript类型系统之Object详解
2016/01/07 Javascript
微信小程序 在Chrome浏览器上运行以及WebStorm的使用
2016/09/27 Javascript
JavaScript表单验证的两种实现方法
2017/02/11 Javascript
JS 中document.write()的用法和清空的原因浅析
2017/12/04 Javascript
小程序页面动态配置实现方法
2019/02/05 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
2020/07/22 Javascript
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
前端vue+elementUI如何实现记住密码功能
2020/09/20 Javascript
[04:22]DOTA2大事件之护国神翼
2020/08/14 DOTA
Python比较两个图片相似度的方法
2015/03/13 Python
Python装饰器原理与用法分析
2018/04/30 Python
Python编程中flask的简介与简单使用
2018/12/28 Python
Python中的asyncio代码详解
2019/06/10 Python
对YOLOv3模型调用时候的python接口详解
2019/08/26 Python
图解python全局变量与局部变量相关知识
2019/11/02 Python
如何在 Django 模板中输出 &quot;{{&quot;
2020/01/24 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
2020/05/25 Python
英国在线潜水商店:Simply Scuba
2019/03/25 全球购物
口腔工艺技术专业毕业生自荐信
2013/09/27 职场文书
护理自我鉴定范文
2013/10/06 职场文书
大学生军训感想
2014/02/16 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
法人单位适用的授权委托书
2014/09/19 职场文书