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中变量交换的例子
Aug 25 Python
Python中的引用和拷贝浅析
Nov 22 Python
python实现的DES加密算法和3DES加密算法实例
Jun 03 Python
Python基于Tkinter实现的记事本实例
Jun 17 Python
Linux中安装Python的交互式解释器IPython的教程
Jun 13 Python
Python Socket传输文件示例
Jan 16 Python
python实现Dijkstra静态寻路算法
Jan 17 Python
Docker部署Python爬虫项目的方法步骤
Jan 19 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
Feb 25 Python
Django认证系统user对象实现过程解析
Mar 02 Python
Jupyter Notebook远程登录及密码设置操作
Apr 10 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
Sep 24 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
PHP5中使用PDO连接数据库的方法
2010/08/01 PHP
PHP遍历数组的三种方法及效率对比分析
2015/02/12 PHP
PHP+Mysql基于事务处理实现转账功能的方法
2015/07/08 PHP
PHP保存session到memcache服务器的方法
2016/01/19 PHP
thinkphp3.2.3 分页代码分享
2016/07/28 PHP
Yii2下session跨域名共存的解决方案
2017/02/04 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
js获取url参数的使用扩展实例
2007/12/29 Javascript
JS event使用方法详解
2008/04/28 Javascript
js setattribute批量设置css样式
2009/11/26 Javascript
jQuery点击弹出下拉菜单的小例子
2013/08/01 Javascript
ExtJs动态生成treepanel的Json格式
2015/07/19 Javascript
javascript实现动态标签云
2015/10/16 Javascript
必备的JS调试技巧汇总
2016/07/20 Javascript
jQuery实现圣诞节礼物传送(花式轮播)
2016/12/25 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
Vue指令实现OutClick的示例
2020/11/16 Javascript
一个检测OpenSSL心脏出血漏洞的Python脚本分享
2014/04/10 Python
简单的Python2.7编程初学经验总结
2015/04/01 Python
Python中用Spark模块的使用教程
2015/04/13 Python
Python实现字典的key和values的交换
2015/08/04 Python
VScode编写第一个Python程序HelloWorld步骤
2018/04/06 Python
python实现合并多个list及合并多个django QuerySet的方法示例
2019/06/11 Python
基于python计算并显示日间、星期客流高峰
2020/05/07 Python
纯css实现照片墙3D效果的示例代码
2017/11/13 HTML / CSS
科沃斯机器人官网商城:Ecovacs
2016/08/29 全球购物
Bluebella法国官网:英国性感内衣品牌
2019/05/03 全球购物
幼儿教育感言
2014/02/05 职场文书
《孔子游春》教学反思
2014/02/25 职场文书
放飞中国梦演讲稿
2014/04/23 职场文书
运动会入场口号
2014/06/07 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
2014年信息宣传工作总结
2014/12/18 职场文书
小学音乐课教学反思
2016/02/18 职场文书
Python还能这么玩之用Python做个小游戏的外挂
2021/06/04 Python
如何在python中实现ECDSA你知道吗
2021/11/23 Python