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编写一个简单的FUSE文件系统的教程
Apr 02 Python
Django使用Celery异步任务队列的使用
Mar 13 Python
Python3.4解释器用法简单示例
Mar 22 Python
django 消息框架 message使用详解
Jul 22 Python
详解Python绘图Turtle库
Oct 12 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
Jun 04 Python
Pytorch实现将模型的所有参数的梯度清0
Jun 24 Python
通过实例解析Python RPC实现原理及方法
Jul 07 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
Jul 13 Python
python smtplib发送多个email联系人的实现
Oct 09 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
Feb 22 Python
教你用python实现12306余票查询
Jun 30 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微信开发之文本自动回复
2016/06/23 PHP
thinkphp5实现无限级分类
2019/02/18 PHP
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
JavaScript数据类型检测代码分享
2015/01/26 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
基于JS实现的笛卡尔乘积之商品发布
2016/05/13 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
2016/08/02 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
jQuery实现select模糊查询(反射机制)
2017/01/14 Javascript
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
js实现跟随鼠标移动的小球
2019/08/26 Javascript
vue+iview使用树形控件的具体使用
2020/11/02 Javascript
Vue实现购物车基本功能
2020/11/08 Javascript
Python编写Windows Service服务程序
2018/01/04 Python
python和shell监控linux服务器的详细代码
2018/06/22 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
HTML的form表单和django的form表单
2019/07/25 Python
wxPython之wx.DC绘制形状
2019/11/19 Python
Python生成词云的实现代码
2020/01/14 Python
什么是python的函数体
2020/06/19 Python
“型”走纽约上东区:Sam Edelman
2017/04/02 全球购物
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
高三学习决心书
2014/03/11 职场文书
俄语专业毕业生求职信
2014/07/12 职场文书
升学宴答谢词
2015/01/05 职场文书
故意伤害辩护词
2015/05/21 职场文书
主持人开场白台词
2015/05/29 职场文书
小学同学聚会感言
2015/07/30 职场文书
忠诚教育学习心得体会
2016/01/23 职场文书
《蚂蚁和蝈蝈》教学反思
2016/02/22 职场文书
导游经典开场白——导游词
2019/04/17 职场文书
JavaScript高级程序设计之基本引用类型
2021/11/17 Javascript
css filter和getUserMedia的联合使用
2022/02/24 HTML / CSS