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在windows命令行下输出彩色文字的方法
Mar 19 Python
在Python的Django框架中包装视图函数
Jul 20 Python
python安装与使用redis的方法
Apr 19 Python
Python实现约瑟夫环问题的方法
May 03 Python
python unittest实现api自动化测试
Apr 04 Python
python学习基础之循环import及import过程
Apr 22 Python
python2与python3中关于对NaN类型数据的判断和转换方法
Oct 30 Python
django将数组传递给前台模板的方法
Aug 06 Python
python 8种必备的gui库
Aug 27 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
Sep 20 Python
Python基于Serializer实现字段验证及序列化
Nov 04 Python
python+opencv实现视频抽帧示例代码
Jun 11 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
xml在joomla表单中的应用详解分享
2012/07/19 PHP
php使HTML标签自动补全闭合函数代码
2012/10/04 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
2015/12/19 PHP
php实现当前页面点击下载文件的简单方法
2016/09/22 PHP
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
2010/03/05 Javascript
从URL中提取参数与将对象转换为URL查询参数的实现代码
2012/01/12 Javascript
js使浏览器窗口最大化实现代码(适用于IE)
2013/08/07 Javascript
javascript判断office版本示例
2014/04/11 Javascript
Jquery实现弹性滑块滑动选择数值插件
2015/08/08 Javascript
深入解析JavaScript框架Backbone.js中的事件机制
2016/02/14 Javascript
Node.js Streams文件读写操作详解
2016/07/04 Javascript
node.js实现回调的方法示例
2017/03/01 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
2017/05/05 Javascript
node文件上传功能简易实现代码
2017/06/16 Javascript
纯js实现页面返回顶部的动画(超简单)
2017/08/10 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
iview table高度动态设置方法
2018/03/14 Javascript
JS实现躲避粒子小游戏
2020/06/18 Javascript
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
python实现线程池的方法
2015/06/30 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
2016/06/27 Python
Tensorflow之Saver的用法详解
2018/04/23 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
python speech模块的使用方法
2020/09/09 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
Staples加拿大官方网站:办公用品一站式采购
2016/09/25 全球购物
巴西体育用品商店:Lojão dos Esportes
2018/07/21 全球购物
台湾旅游网站:灿星旅游
2018/10/11 全球购物
mysql的最长数据库名,表名,字段名可以是多长
2014/04/21 面试题
食堂员工工作职责
2013/12/18 职场文书
2014党员学习《反腐倡廉警示教育读本》思想汇报
2014/09/13 职场文书
2014年平安夜寄语
2014/12/08 职场文书
个人简历求职信范文
2015/03/20 职场文书
靠谱准确的求职信
2019/04/02 职场文书
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
2022/08/14 Python