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使用chardet判断字符串编码的方法
Mar 13 Python
Python中下划线的使用方法
Mar 27 Python
Python脚本在Appium库上对移动应用实现自动化测试
Apr 17 Python
Python3中的列表,元组,字典,字符串相关知识小结
Nov 10 Python
Python实现定时精度可调节的定时器
Apr 15 Python
python操作excel的方法
Aug 16 Python
Python3 pandas 操作列表实例详解
Sep 23 Python
Pandas 缺失数据处理的实现
Nov 04 Python
python传到前端的数据,双引号被转义的问题
Apr 03 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
Apr 17 Python
简单了解python关键字global nonlocal区别
Sep 21 Python
详解python3类型注释annotations实用案例
Jan 20 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验证终端类型是否为手机的简单实例
2017/02/07 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
2017/10/07 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
2007/03/10 Javascript
轻轻松松学JS调试(不下载任何工具)
2010/04/14 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
JavaScript中连接操作Oracle数据库实例
2015/04/02 Javascript
jQuery构造函数init参数分析续
2015/05/13 Javascript
JS 调用微信扫一扫功能
2016/12/22 Javascript
详解angular2封装material2对话框组件
2017/03/03 Javascript
javascript 判断用户有没有操作页面
2017/10/17 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
2017/12/14 Javascript
form表单数据封装成json格式并提交给服务器的实现方法
2017/12/14 Javascript
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
Vue中跨域及打包部署到nginx跨域设置方法
2019/08/26 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
2020/01/18 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
vue实现井字棋游戏
2020/09/29 Javascript
[01:52]PWL S2开团时刻第四期——DOTA2成语故事
2020/12/03 DOTA
python之文件的读写和文件目录以及文件夹的操作实现代码
2016/08/28 Python
windows10系统中安装python3.x+scrapy教程
2016/11/08 Python
python flask web服务实现更换默认端口和IP的方法
2019/07/26 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
解决TensorFlow模型恢复报错的问题
2020/02/06 Python
CSS3中的常用选择器使用示例整理
2016/06/13 HTML / CSS
一道Delphi上机题
2012/06/04 面试题
保安辞职信范文
2015/02/28 职场文书
综合测评自我评价
2015/03/06 职场文书
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
2015年党风廉政建设目标责任书
2015/05/08 职场文书
2015年英语教研组工作总结
2015/05/23 职场文书
商业计划书格式、范文
2019/03/21 职场文书
python字符串拼接.join()和拆分.split()详解
2021/11/23 Python
Java字符串逆序方法详情
2022/03/21 Java/Android
nginx搭建NFS网络文件系统
2022/04/14 Servers
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android