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 数据库 (sqlite3)应用
Dec 07 Python
Python读取指定目录下指定后缀文件并保存为docx
Apr 23 Python
利用Python在一个文件的头部插入数据的实例
May 02 Python
Python global全局变量函数详解
Sep 18 Python
详解python读取和输出到txt
Mar 29 Python
Pandas中resample方法详解
Jul 02 Python
python二进制文件的转译详解
Jul 03 Python
python 字符串常用函数详解
Sep 11 Python
Python实现自定义读写分离代码实例
Nov 16 Python
Python如何使用内置库matplotlib绘制折线图
Feb 24 Python
python输出结果刷新及进度条的实现操作
Jul 13 Python
Python OpenCV 彩色与灰度图像的转换实现
Jun 05 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
MOTOROLA 摩托罗拉 MODEL 66-XI五灯中波收音机
2021/03/02 无线电
来自PHP.NET的入门教程
2006/10/09 PHP
php下检测字符串是否是utf8编码的代码
2008/06/28 PHP
PHP mail()函数使用及配置方法
2014/01/14 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
php-fpm中max_children的配置
2019/03/15 PHP
javascript 无提示关闭窗口脚本
2009/08/17 Javascript
解决jquery的.animate()函数在IE6下的问题
2010/12/03 Javascript
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
可兼容IE的获取及设置cookie的jquery.cookie函数方法
2013/09/02 Javascript
SeaJS入门教程系列之使用SeaJS(二)
2014/03/03 Javascript
JavaScript利用正则表达式去除日期中的-
2014/06/09 Javascript
js选择并转移导航菜单示例代码
2014/08/19 Javascript
微信小程序 icon组件详细及实例代码
2016/10/25 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
微信小程序实现图片上传功能
2018/05/28 Javascript
VUE实现可随意拖动的弹窗组件
2018/09/25 Javascript
微信上传视频文件提示(推荐)
2018/11/22 Javascript
bootstrap中的导航条实例代码详解
2019/05/20 Javascript
JavaScript计算正方形面积
2019/11/26 Javascript
[48:45]Ti4 循环赛第二日 NEWBEE vs EG
2014/07/11 DOTA
[55:03]LGD vs EG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python实现图书馆研习室自动预约功能
2018/04/27 Python
详解python中eval函数的作用
2019/10/22 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
python操作redis数据库的三种方法
2020/09/10 Python
基于Python正确读取资源文件
2020/09/14 Python
Kangol帽子官网:坎戈尔袋鼠
2018/09/26 全球购物
Skyscanner加拿大:全球旅行搜索平台
2018/11/19 全球购物
奥地利领先的在线药房:SHOP APOTHEKE
2019/10/07 全球购物
实习自荐信
2013/10/13 职场文书
音乐教学随笔感言
2014/02/19 职场文书
情人节寄语大全
2014/04/11 职场文书
租车协议书范本
2014/04/22 职场文书
党的群众路线批评与自我批评发言稿
2014/10/16 职场文书
2014年售票员工作总结
2014/11/19 职场文书