Django之无名分组和有名分组的实现


Posted in Python onApril 16, 2019

在Django 2.0版本之前,在urls,py文件中,用url设定视图函数

urlpatterns = [
 url(r'login/',views.login),
]

其中第一个参数是正则匹配,如下代码,输入http://127.0.0.1:8000/login,出现的是login页面,但是输入login2,出现的还是login页面,这是因为Django会将匹配成功的返回,不会继续往下匹配

urlpatterns = [
 url(r'login',views.login),
 url(r'login2',views.login2),
]

所以为了避免上面这种情况,可以在第一个参数加上正则表达式

urlpatterns = [
 url(r'^login/$',views.login),
 url(r'^login2/$',views.login2),
]

^ 号限定开头,$限定结尾,' / '为匹配机制,比如第一次输入:http://127.0.0.1:8000/login,没有匹配成功,系统会自动加上‘/‘再进行一次匹配

这样就可以写出首页和尾页(尾页是指找不到对应页面时打开的页面,俗称404)

urlpatterns = [
 url(r'^$',views.home), #这是首页
 url(r'',views.error) #这是尾页
]

同样的既然可以进行正则匹配,那么就可以写更多的正则语法:

urlpatterns = [
 url(r'^login/[0-9]{4}$',views.login),
]

类似上面写出的正则,就是login/ 后面随意加上4位数字都可以访问login页面

同样的正则还有分组的概念,但是在Django中把分组分为两种:无名分组和有名分组

无名分组:

urlpatterns = [
 url(r'^login/([0-9]{4})$',views.login),
]

在普通的正则匹配中加上()就是无名分组,那么这样有什么意义呢?

首先在后端的views上,会得到一个分组的参数,以上面代码为例,那么views.login函数的参数除了request,还需要添加一个参数(名字随意),进行几次分组那么就需要多添加几次参数

进入view页面,其中xxx的名字是随意的,传进来的分组的数据例如我输入的网址是:login/222,那么xxx的值为222

def login(request,xxx):
 print(xxx)

有名分组:

有名分组其实就是在无名的分组的基础上加上了名字

urlpatterns = [
 url(r'^login/(?P<year>[0-9]{4})$',views.login),
]

语法为:(?P<名字> 正则表达式),就是在无名分组的括号里面加上了?P<名字>,注意其中P为大写

既然有了名字,那么在views页面就不能给函数传递随意的参数了:

def login(request,year):
 print(year)

第二个参数year是urls页面命名的名字:

Django之无名分组和有名分组的实现

如果名字不一样则会报错

这里有一个坑,既然分组有有名分组和无名分组,那么能不能一起使用?

答:不行,别问,问就是不行

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

Python 相关文章推荐
python中OrderedDict的使用方法详解
May 05 Python
python使用super()出现错误解决办法
Aug 14 Python
python深度优先搜索和广度优先搜索
Feb 07 Python
对Python3中bytes和HexStr之间的转换详解
Dec 04 Python
Python3内置模块之base64编解码方法详解
Jul 13 Python
Python+OpenCv制作证件图片生成器的操作方法
Aug 21 Python
python中Lambda表达式详解
Nov 20 Python
python异常处理和日志处理方式
Dec 24 Python
tensorflow实现在函数中用tf.Print输出中间值
Jan 21 Python
基于Python爬虫采集天气网实时信息
Jun 05 Python
Python  word实现读取及导出代码解析
Jul 09 Python
python文件名批量重命名脚本实例代码
Apr 22 Python
Pythony运维入门之Socket网络编程详解
Apr 15 #Python
使用python实现抓取腾讯视频所有电影的爬虫
Apr 15 #Python
Python 编程速成(推荐)
Apr 15 #Python
值得收藏的10道python 面试题
Apr 15 #Python
Python 学习教程之networkx
Apr 15 #Python
Python OS模块实例详解
Apr 15 #Python
Python日期时间Time模块实例详解
Apr 15 #Python
You might like
php实现图片缩放功能类
2013/12/18 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
2016/04/26 PHP
php+js实现百度地图多点标注的方法
2016/11/30 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
PHP中上传文件打印错误错误类型分析
2019/04/14 PHP
比较全的JS checkbox全选、取消全选、删除功能代码
2008/12/19 Javascript
jquery validation插件表单验证的一个例子
2010/03/03 Javascript
jQuery+PHP实现动态数字展示特效
2015/03/14 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
javascript深拷贝(deepClone)详解
2016/08/24 Javascript
vue2过滤器模糊查询方法
2018/09/16 Javascript
谈谈我在vue-cli3中用预渲染遇到的坑
2020/04/22 Javascript
js实现盒子滚动动画效果
2020/08/09 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
2020/10/28 Javascript
python self,cls,decorator的理解
2009/07/13 Python
python将MongoDB里的ObjectId转换为时间戳的方法
2015/03/13 Python
Python socket编程实例详解
2015/05/27 Python
python3使用requests模块爬取页面内容的实战演练
2017/09/25 Python
对numpy中向量式三目运算符详解
2018/10/31 Python
django queryset 去重 .distinct()说明
2020/05/19 Python
Python如何爬取b站热门视频并导入Excel
2020/08/10 Python
HTML5通过navigator.mediaDevices.getUserMedia调用手机摄像头问题
2020/04/27 HTML / CSS
全球航班旅行搜索网站:Cheapflights
2017/05/19 全球购物
美国高档帽子网上商店:Hats.com
2018/08/09 全球购物
高中政治教学反思
2014/01/18 职场文书
交通安全标语
2014/06/06 职场文书
社会实践活动总结范文
2014/07/03 职场文书
施工安全汇报材料
2014/08/17 职场文书
小学向国旗敬礼活动方案
2014/09/27 职场文书
2014年生产管理工作总结
2014/12/23 职场文书
老人节主持词
2015/07/04 职场文书
Spring Data JPA的Audit功能审计数据库的变更
2021/06/26 Java/Android
vue中div禁止点击事件的实现
2022/04/02 Vue.js
MySQL创建管理KEY分区
2022/04/13 MySQL