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爬虫之爬虫框架Scrapy安装配置
Nov 06 Python
Python守护进程和脚本单例运行详解
Jan 06 Python
Python 高级专用类方法的实例详解
Sep 11 Python
Python实现求一个集合所有子集的示例
May 04 Python
对Python中gensim库word2vec的使用详解
May 08 Python
Python检测网络延迟的代码
May 15 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
Jun 01 Python
python中partial()基础用法说明
Dec 30 Python
python运用pygame库实现双人弹球小游戏
Nov 25 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
Jul 01 Python
解决pip install psycopg2出错问题
Jul 09 Python
Python+OpenCV图像处理——实现轮廓发现
Oct 23 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生成不重复标识符的方法
2014/11/21 PHP
Laravel实现ORM带条件搜索分页
2019/10/24 PHP
jquery 事件执行检测代码
2009/12/09 Javascript
轻松创建nodejs服务器(8):非阻塞是如何实现的
2014/12/18 NodeJs
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
js用拖动滑块来控制图片大小的方法
2015/02/27 Javascript
详解JavaScript逻辑Not运算符
2015/12/04 Javascript
jQuery实现的精美平滑二级下拉菜单效果代码
2016/03/28 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
nodejs简单实现操作arduino
2016/09/25 NodeJs
angularJS模态框$modal实例代码
2017/05/27 Javascript
vue+node+webpack环境搭建教程
2017/11/05 Javascript
JS实现的JSON序列化操作简单示例
2018/07/02 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
2018/09/01 Javascript
cocos2dx+lua实现橡皮擦功能
2018/12/20 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
Node.js 的 GC 机制详解
2019/06/03 Javascript
解决vue项目axios每次请求session不一致的问题
2020/10/24 Javascript
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
Python通用循环的构造方法实例分析
2018/12/19 Python
Python语言进阶知识点总结
2019/05/28 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
pytorch GAN伪造手写体mnist数据集方式
2020/01/10 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
基于Python+QT的gui程序开发实现
2020/07/03 Python
如何将字串String转换成整数int
2015/02/21 面试题
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
国培计划培训感言
2014/03/11 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
学期个人自我总结
2015/02/13 职场文书
2015年办公室工作总结范文
2015/03/31 职场文书
2015年社区矫正工作总结
2015/04/21 职场文书
再次探讨go实现无限 buffer 的 channel方法
2021/06/13 Golang
Feign调用传输文件异常的解决
2021/06/24 Java/Android
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server