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里disconnect UDP套接字的方法
Apr 23 Python
Java多线程编程中ThreadLocal类的用法及深入
Jun 21 Python
python中常用的九种预处理方法分享
Sep 11 Python
PyCharm代码格式调整方法
May 23 Python
python实现顺时针打印矩阵
Mar 02 Python
Ubuntu18.04下python版本完美切换的解决方法
Jun 14 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
Aug 20 Python
PyCharm搭建Spark开发环境的实现步骤
Sep 05 Python
python打印异常信息的两种实现方式
Dec 24 Python
python获取依赖包和安装依赖包教程
Feb 13 Python
python上传时包含boundary时的解决方法
Apr 08 Python
Python实现简单的猜单词
Jun 15 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
php三维数组去重(示例代码)
2013/11/26 PHP
PHP检测用户语言的方法
2015/06/15 PHP
PHP连接MSSQL方法汇总
2016/02/05 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
DIY jquery plugin - tabs标签切换实现代码
2010/12/11 Javascript
基于jquery的二级联动菜单实现代码
2011/04/25 Javascript
Javascript面向对象编程
2012/03/18 Javascript
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
Mac/Windows下如何安装Node.js
2013/11/22 Javascript
jQuery中appendTo()方法用法实例
2015/01/08 Javascript
图解JavaScript中的this关键字
2020/05/28 Javascript
jquery对象和DOM对象的任意相互转换
2016/02/21 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
seajs实现强制刷新本地缓存的方法分析
2017/10/16 Javascript
Vue2.0+ElementUI实现表格翻页的实例
2017/10/23 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
Nodejs模块载入运行原理
2018/02/23 NodeJs
关于jquery layui弹出层的使用方法
2018/04/21 jQuery
vue 动态绑定背景图片的方法
2018/08/10 Javascript
微信小程序发送短信验证码完整实例
2019/01/07 Javascript
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
python类和继承用法实例
2015/07/07 Python
在Django的模型和公用函数中使用惰性翻译对象
2015/07/27 Python
在Django中进行用户注册和邮箱验证的方法
2016/05/09 Python
Python正则捕获操作示例
2017/08/19 Python
python使用epoll实现服务端的方法
2018/10/16 Python
python自动化生成IOS的图标
2018/11/13 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
2020/03/12 Python
若通过ObjectOutputStream向一个文件中多次以追加方式写入object,为什么用ObjectInputStream读取这些object时会产生StreamCorruptedException?
2016/10/17 面试题
大学生饮食连锁店创业计划书
2014/01/17 职场文书
面试后感谢信怎么写
2014/02/01 职场文书
美术教师个人工作总结
2015/02/06 职场文书
公司员工辞职信范文
2015/05/12 职场文书
MySQL聚簇索引和非聚簇索引的区别详情
2022/06/14 MySQL