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 相关文章推荐
Go/Python/Erlang编程语言对比分析及示例代码
Apr 23 Python
基于PyQt4和PySide实现输入对话框效果
Feb 27 Python
pandas 数据结构之Series的使用方法
Jun 21 Python
使用Windows批处理和WMI设置Python的环境变量方法
Aug 14 Python
python with (as)语句实例详解
Feb 04 Python
python实现逆滤波与维纳滤波示例
Feb 26 Python
python 操作mysql数据中fetchone()和fetchall()方式
May 15 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
Jul 09 Python
8种常用的Python工具
Aug 05 Python
python 实现aes256加密
Nov 27 Python
详解python网络进程
Jun 15 Python
使用pandas生成/读取csv文件的方法实例
Jul 09 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全概率运算函数(优化版) Webgame开发必备
2011/07/04 PHP
showModalDialog 和 showModelessDialog
2007/01/22 Javascript
JS location几个方法小姐
2008/07/09 Javascript
CSS JavaScript 实现菜单功能 改进版
2008/12/09 Javascript
Javascript学习笔记6 prototype的提出
2010/01/11 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
2014/05/08 Javascript
node.js Web应用框架Express入门指南
2014/05/28 Javascript
javascript中CheckBox全选终极方案
2015/05/20 Javascript
JavaScript继承学习笔记【新手必看】
2016/05/10 Javascript
深入理解JavaScript中为什么string可以拥有方法
2016/05/24 Javascript
JavaScript闭包与作用域链实例分析
2019/01/21 Javascript
vue实现购物车抛物线小球动画效果的方法详解
2019/02/13 Javascript
vue基础之data存储数据及v-for循环用法示例
2019/03/08 Javascript
JavaScript相等运算符的九条规则示例详解
2019/10/20 Javascript
在vue+element ui框架里实现lodash的debounce防抖
2019/11/13 Javascript
[04:14]从西雅图到上海——玩家自制DOTA2主题歌曲应援TI9
2019/07/11 DOTA
[01:02:26]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第二场 1月18日
2021/03/11 DOTA
Python实现自动上京东抢手机
2018/02/06 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
2019/06/25 Python
selenium+PhantomJS爬取豆瓣读书
2019/08/26 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
Python 爬取必应壁纸的实例讲解
2020/02/24 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
Marc O’Polo俄罗斯官方在线商店:德国高端时尚品牌
2019/12/26 全球购物
Diesel美国网上商店:意大利牛仔时装品牌
2020/12/10 全球购物
网上常见的一份Linux面试题(多项选择部分)
2014/09/09 面试题
医药大学生求职简历的自我评价
2013/10/17 职场文书
服务之星获奖感言
2014/01/21 职场文书
军训自我鉴定
2014/01/22 职场文书
《水上飞机》教学反思
2014/04/10 职场文书
城市创卫标语
2014/06/17 职场文书
初中生庆国庆演讲稿范文2014
2014/09/25 职场文书
2015年监理个人工作总结
2015/05/23 职场文书
禁毒主题班会教案
2015/08/14 职场文书
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript