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实现接口的方法
Jul 07 Python
机器学习python实战之手写数字识别
Nov 01 Python
python绘制铅球的运行轨迹代码分享
Nov 14 Python
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
Jan 16 Python
python自动化报告的输出用例详解
May 30 Python
OpenCV-Python 摄像头实时检测人脸代码实例
Apr 30 Python
python3 tcp的粘包现象和解决办法解析
Dec 09 Python
Numpy与Pytorch 矩阵操作方式
Dec 27 Python
解决python 找不到module的问题
Feb 12 Python
django日志默认打印request请求信息的方法示例
May 17 Python
python删除文件、清空目录的实现方法
Sep 23 Python
python代数式括号有效性检验示例代码
Oct 04 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
oracle资料库函式库
2006/10/09 PHP
PHP 文件上传功能实现代码
2009/06/24 PHP
3个PHP多维数组转为一维数组的方法实例
2014/03/13 PHP
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
php文件上传你必须知道的几点
2015/10/20 PHP
PHP Header失效的原因分析及解决方法
2016/11/16 PHP
PHP实现webshell扫描文件木马的方法
2017/07/31 PHP
在网页中使用document.write时遭遇的奇怪问题
2010/08/24 Javascript
使用jQuery模板来展现json数据的代码
2010/10/22 Javascript
微信小程序 教程之列表渲染
2016/10/18 Javascript
jquery实现提示语淡入效果
2017/05/05 jQuery
javascript实现文本框标签验证的实例代码
2018/10/14 Javascript
微信小程序云开发详细教程
2019/05/16 Javascript
layui表单验证select下拉框实现验证的方法
2019/09/05 Javascript
vue setInterval 定时器失效的解决方式
2020/07/30 Javascript
如何使用JS console.log()技巧提高工作效率
2020/10/14 Javascript
django 自定义用户user模型的三种方法
2014/11/18 Python
Python黑魔法@property装饰器的使用技巧解析
2016/06/16 Python
django限制匿名用户访问及重定向的方法实例
2018/02/07 Python
Python中循环引用(import)失败的解决方法
2018/04/22 Python
网红编程语言Python将纳入高考你怎么看?
2018/06/07 Python
用Python实现BP神经网络(附代码)
2019/07/10 Python
python如何统计代码运行的时长
2019/07/24 Python
python按修改时间顺序排列文件的实例代码
2019/07/25 Python
Python 模拟动态产生字母验证码图片功能
2019/12/24 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
印尼最大的在线购物网站:MatahariMall.com
2016/08/26 全球购物
美国最大的在线寄售和旧货店:Swap.com
2018/08/27 全球购物
印度尼西亚最完整和最大的在线药房网站:Farmaku.com
2019/11/23 全球购物
DOM和JQuery对象有什么区别
2016/11/11 面试题
学子宴答谢词
2014/01/25 职场文书
会计顶岗实习心得
2014/01/25 职场文书
个人专业技术总结
2015/03/05 职场文书
同学聚会通知书
2015/04/20 职场文书
Django中session进行权限管理的使用
2021/07/09 Python
Python实现灰色关联分析与结果可视化的详细代码
2022/03/25 Python