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的Django框架中编写编译函数
Jul 20 Python
Python面向对象编程基础解析(二)
Oct 26 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
May 22 Python
多个应用共存的Django配置方法
May 30 Python
python保存二维数组到txt文件中的方法
Nov 15 Python
不到20行代码用Python做一个智能聊天机器人
Apr 19 Python
python tkinter控件布局项目实例
Nov 04 Python
Python函数式编程指南:对生成器全面讲解
Nov 19 Python
pytorch实现建立自己的数据集(以mnist为例)
Jan 18 Python
基于python实现模拟数据结构模型
Jun 12 Python
Python日志器使用方法及原理解析
Sep 27 Python
python3从网络摄像机解析mjpeg http流的示例
Nov 13 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
使用sockets:从新闻组中获取文章(一)
2006/10/09 PHP
php创建、获取cookie及基础要点分析
2015/01/26 PHP
PHP实现动态web服务器方法
2015/07/29 PHP
php中namespace use用法实例分析
2016/01/22 PHP
Yii2.0预定义的别名功能小结
2016/07/04 PHP
Extjs学习笔记之六 面版
2010/01/08 Javascript
通过继承IHttpHandle实现JS插件的组织与管理
2010/07/13 Javascript
JQuery UI DatePicker中z-index默认为1的解决办法
2010/09/28 Javascript
原生Js页面滚动延迟加载图片实现原理及过程
2013/06/24 Javascript
jquery对dom节点的操作【推荐】
2016/04/15 Javascript
JavaScript制作简易计算器(不用eval)
2017/02/05 Javascript
AngularJS 应用模块化的使用
2018/04/04 Javascript
使用 Node.js 实现图片的动态裁切及算法实例代码详解
2018/09/29 Javascript
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
Windows下PyMongo下载及安装教程
2015/04/27 Python
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
2015/07/27 Python
sublime text 3配置使用python操作方法
2017/06/11 Python
Python实现去除列表中重复元素的方法小结【4种方法】
2018/04/27 Python
python-str,list,set间的转换实例
2018/06/27 Python
python+webdriver自动化环境搭建步骤详解
2019/06/03 Python
Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)
2019/08/12 Python
Pycharm 安装 idea VIM插件的图文教程详解
2020/02/21 Python
Pycharm自带Git实现版本管理的方法步骤
2020/09/18 Python
python基于opencv实现人脸识别
2021/01/04 Python
REISS英国官网:伦敦High Street最受欢迎品牌
2016/12/21 全球购物
Under Armour安德玛德国官网:美国高端运动科技品牌
2019/03/09 全球购物
Order by的几种用法
2013/06/16 面试题
室内设计专业个人的自我评价
2013/12/18 职场文书
人事专员职责
2014/02/22 职场文书
合同意向书范本
2014/07/30 职场文书
班子四风对照检查材料
2014/08/21 职场文书
企业委托书范本
2014/09/13 职场文书
2015年部门工作总结范文
2015/03/31 职场文书
家长对学校的意见和建议
2015/06/03 职场文书
普希金诗歌赏析(6首)
2019/08/22 职场文书
sql时间段切分实现每隔x分钟出一份高速门架车流量
2022/02/28 SQL Server