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的id()函数解密过程
Dec 25 Python
linux系统使用python监控apache服务器进程脚本分享
Jan 15 Python
使用Python抓取模板之家的CSS模板
Mar 16 Python
Linux中Python 环境软件包安装步骤
Mar 31 Python
对python 各种删除文件失败的处理方式分享
Apr 24 Python
django manage.py扩展自定义命令方法
May 27 Python
Python os.access()用法实例
Feb 18 Python
Python 中的 import 机制之实现远程导入模块
Oct 29 Python
python滑块验证码的破解实现
Nov 10 Python
PyTorch和Keras计算模型参数的例子
Jan 02 Python
python如何求100以内的素数
May 27 Python
opencv python 对指针仪表读数识别的两种方式
Jan 14 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模拟ping命令(php exec函数的使用方法)
2013/10/25 PHP
php中substr()函数参数说明及用法实例
2014/11/15 PHP
php自动给网址加上链接的方法
2015/06/02 PHP
js解析与序列化json数据(一)json.stringify()的基本用法
2013/02/01 Javascript
js汉字转拼音实现代码
2013/02/06 Javascript
javascript:void(0)的作用示例介绍
2013/10/28 Javascript
iframe子页面获取父页面元素的方法
2013/11/05 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
js统计页面的来访次数实现代码
2014/05/09 Javascript
jQuery判断复选框是否勾选的原理及示例
2014/05/21 Javascript
C#中使用迭代器处理等待任务
2015/07/13 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
2016/05/09 Javascript
jquery树形菜单效果的简单实例
2016/06/06 Javascript
AngularJS基础 ng-keydown 指令简单示例
2016/08/02 Javascript
解读vue生成的文件目录结构及说明
2017/11/27 Javascript
基于vue-video-player自定义播放器的方法
2018/03/21 Javascript
详解Vue中watch的高级用法
2018/05/02 Javascript
VUE实现可随意拖动的弹窗组件
2018/09/25 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
微信小程序实现多个按钮的颜色状态转换
2019/02/15 Javascript
[44:04]OG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python实现应用程序在右键菜单中添加打开方式功能
2017/01/09 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
python打开windows应用程序的实例
2019/06/28 Python
Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例
2020/03/03 Python
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
二手房购房意向书范本
2014/04/01 职场文书
2014银行领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
小学班主任自我评价
2015/03/11 职场文书
2015年党风廉政建设目标责任书
2015/05/08 职场文书
党风廉政承诺书2016
2016/03/25 职场文书
简历中的自我评价怎么写呢?
2019/04/30 职场文书
《文化苦旅》读后感:阅读,让人诗意地栖居在大地上
2019/12/24 职场文书
Mysql Show Profile
2021/04/05 MySQL