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多进程和多线程究竟谁更快(详解)
May 29 Python
python书籍信息爬虫实例
Mar 19 Python
Python比较2个时间大小的实现方法
Apr 10 Python
用pandas中的DataFrame时选取行或列的方法
Jul 11 Python
利用Python如何批量修改数据库执行Sql文件
Jul 29 Python
python async with和async for的使用
Jun 20 Python
ipython和python区别详解
Jun 26 Python
python 爬取疫情数据的源码
Feb 09 Python
Python基于Tkinter编写crc校验工具
May 06 Python
Python SMTP配置参数并发送邮件
Jun 16 Python
Python制作简单的剪刀石头布游戏
Dec 10 Python
PyTorch 如何自动计算梯度
May 23 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传输数据的代码
2007/11/13 PHP
php 常用类整理
2009/12/23 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
PHP 设计模式系列之 specification规格模式
2016/01/10 PHP
如何让PHP编码更加好看利于阅读
2019/05/12 PHP
php实现分页功能的详细实例方法
2019/09/29 PHP
jQuery下的动画处理总结
2013/10/10 Javascript
html的DOM中document对象anchors集合用法实例
2015/01/21 Javascript
javaScript中with函数用法实例分析
2015/06/08 Javascript
Angular2开发——组件规划篇
2017/03/28 Javascript
React Native使用Modal自定义分享界面的示例代码
2017/10/31 Javascript
webpack 单独打包指定JS文件的方法
2018/02/22 Javascript
vue elementUI tree树形控件获取父节点ID的实例
2018/09/12 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
js实现单元格拖拽效果
2020/02/10 Javascript
[45:59]完美世界DOTA2联赛PWL S2 FTD vs GXR 第二场 11.22
2020/11/24 DOTA
Python删除指定目录下过期文件的2个脚本分享
2014/04/10 Python
python简单文本处理的方法
2015/07/10 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
python 遍历目录(包括子目录)下所有文件的实例
2018/07/11 Python
python3.8下载及安装步骤详解
2020/01/15 Python
python实现程序重启和系统重启方式
2020/04/16 Python
k-means 聚类算法与Python实现代码
2020/06/01 Python
详解HTML5新增标签
2017/11/27 HTML / CSS
毕业生医学检验求职信
2013/10/16 职场文书
2014年大学庆元旦迎新年活动方案
2014/03/09 职场文书
金融事务专业求职信
2014/04/25 职场文书
房地产公司见习自我鉴定
2014/04/28 职场文书
小学标准化建设汇报材料
2014/08/16 职场文书
分家协议书范本
2016/03/22 职场文书
python 标准库原理与用法详解之os.path篇
2021/10/24 Python
Python中time与datetime模块使用方法详解
2022/03/31 Python
SQL Server的存储过程与触发器以及系统函数和自定义函数
2022/04/10 SQL Server
Nginx 安装SSL证书完成HTTPS部署
2022/04/28 Servers
NASA 机智号火星直升机拍到了毅力号设备碎片
2022/04/29 数码科技