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语言的12个基础知识点小结
Jul 10 Python
Python合并字符串的3种方法
May 21 Python
使用python绘制二元函数图像的实例
Feb 12 Python
详解Python3 基本数据类型
Apr 19 Python
pyqt5 实现在别的窗口弹出进度条
Jun 18 Python
python实现两个一维列表合并成一个二维列表
Dec 02 Python
Python3 全自动更新已安装的模块实现
Jan 06 Python
解决python3插入mysql时内容带有引号的问题
Mar 02 Python
Python脚本导出为exe程序的方法
Mar 25 Python
python3中sys.argv的实例用法
Apr 24 Python
Python selenium使用autoIT上传附件过程详解
May 26 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
Jun 02 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
封装一个PDO数据库操作类代码
2009/09/09 PHP
PHP 开发环境配置(Zend Server安装)
2010/04/28 PHP
curl和libcurl的区别简介
2015/07/01 PHP
Zend Framework框架Smarty扩展实现方法
2016/03/22 PHP
laravel5使用freetds连接sql server的方法
2018/12/07 PHP
BOOM vs RR BO5 第三场 2.14
2021/03/10 DOTA
jquery 模式对话框终极版实现代码
2009/09/28 Javascript
基于jquery可配置循环左右滚动例子
2011/09/09 Javascript
使用apply方法实现javascript中的对象继承
2013/12/16 Javascript
js如何判断用户是在PC端和还是移动端访问
2014/04/24 Javascript
js实现的点击div区域外隐藏div区域
2014/06/30 Javascript
浅谈JS中逗号运算符的用法
2016/06/12 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
layer弹出层框架alert与msg详解
2017/03/14 Javascript
详解React 16 中的异常处理
2017/07/28 Javascript
node.js操作MongoDB的实例详解
2017/10/11 Javascript
详细分析JS函数去抖和节流
2017/12/05 Javascript
vue弹窗组件使用方法
2018/04/28 Javascript
vue移动端路由切换实例分析
2018/05/14 Javascript
Vue中&quot;This dependency was not found&quot;问题的解决方法
2018/06/19 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
详解将微信小程序接口Promise化并使用async函数
2019/08/05 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
2019/10/25 Javascript
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
2015/03/30 Python
Python连接数据库学习之DB-API详解
2017/02/07 Python
python实现求解列表中元素的排列和组合问题
2018/03/15 Python
python 处理dataframe中的时间字段方法
2018/04/10 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
2019/01/29 Python
ipad上运行python的方法步骤
2019/10/12 Python
Agoda香港:全球特价酒店预订
2017/05/07 全球购物
中专生职业生涯规划书范文
2013/12/29 职场文书
干部下基层实施方案
2014/03/14 职场文书
2015年团支书工作总结
2015/04/03 职场文书
唐山大地震观后感
2015/06/05 职场文书
Redis基本数据类型List常用操作命令
2022/06/01 Redis