django http404 详解

【引子】

  今天在看django的官方文档的时候看到get_object_or_404这个函数感觉比较奇怪。这个主要来自于它的功能,如果要查询的对象

  存在那么就返回对象;如果对象不存在那么就要报404 Not Found ;但是404 Not Found并不是它的返回值,而django直接返回

  了404页面、这个感觉就比较奇怪了。

 

1、对get_object_or_404的一次失败地模拟

from django.shortcuts import render
from django.http import Http404,HttpResponsedef fun_get_object_or_404(pk=None):if pk == 1:return 1else:return HttpResponse('object is not found ...')def index(request):obj = fun_get_object_or_404()return HttpResponse("object is {0}".format(obj))

先看一下view的执行结果吧

从返回的内容我们可以看出来、view对HttpResponse的处理并不像middleware中的那样;middleware只要是遇到return HttpResponse 这样的

内容就会马上返回response对象到浏览器;那get_object_or_404 是怎么实现的呢?

 

2、get_object_or_404 的官方实现

def get_object_or_404(klass, *args, **kwargs):"""Use get() to return an object, or raise a Http404 exception if the objectdoes not exist.klass may be a Model, Manager, or QuerySet object. All other passedarguments and keyword arguments are used in the get() query.Like with QuerySet.get(), MultipleObjectsReturned is raised if more thanone object is found."""queryset = _get_queryset(klass)try:return queryset.get(*args, **kwargs)except AttributeError:klass__name = klass.__name__ if isinstance(klass, type) else klass.__class__.__name__raise ValueError("First argument to get_object_or_404() must be a Model, Manager, ""or QuerySet, not '%s'." % klass__name)except queryset.model.DoesNotExist:raise Http404('No %s matches the given query.' % queryset.model._meta.object_name)

这个也只是raise 了一个Http404、注意这里是raise 而不是return 说明Http404并不是一个HttpResponse的子类、应该是一个异常。

 

3、Http404的官方实现

class Http404(Exception):pass

扎心啦! 这货就一个简单的Exception 子类、并不是HttpResponse的子类、还有一点要注意的不要想用raise Exception('xxx')的方式来

替代Http404是行不通的、这样做话会直接报错。

 

 

----

转载于:https://www.cnblogs.com/JiangLe/p/9178903.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这一年,科学高度不断刷新

来源:科技日报●存算一体架构在手写数字集上的识别准确率达到96.19%●截至12月14日21时,“天问一号”探测器已在轨飞行144天,飞行里程约3.6亿公里,距离地球超过1亿公里●嫦娥五号经历了11个阶段、23天的在轨工作,采集了…

python天天向上的力量三天打鱼两天晒网_017 示例3-天天向上的力量-Go语言中文社区...

一、"天天向上的力量"问题分析1.1 天天向上的力量基本问题:持续的价值一年365天,每天进步1%,累计进步多少呢?(1.01^{365})一年365天,每天退步1%,累计剩下多少呢?(0.99^{365})1.2 需求…

CNS三大刊2020年年度最佳论文全部出炉!脑科学一共4篇,我国学者入选1篇!

来源: brainnews编辑部、inature编辑部来源:生物谷旗下细胞公众号,药明康德团队旗下学术经纬公众号Cell ,Nature和Science 三大期刊2020年年度最佳论文全部公布,brainnews编辑部摘选其中跟脑科学相关的文章,跟大家一起…

redis创建像mysql表结构_Redis数据结构列表实现

双向链表linkedlistRedis实现的是标准的双向链表。链表节点定义:链表定义:总结链表实现:1.每个节点有前后节点指针,且第一个节点的指针为NULL,最后一个节点的指针为NULL(无环)。2.对双链表进行封装,链表第一个节点和最…

神经符号系统、因果推理、跨学科交互,李飞飞、Judea Pearl等16名学者共同探讨AI未来...

来源:机器之心去年,纽约大学心理学和神经科学教授 Gary Marcus 和深度学习先驱、2018 年图灵奖得主 Yoshua Bengio 就 AI 技术的发展方向展开了一场现场辩论。今年,Gary Marcus 与 Montreal.AI 负责人 Vincent Boucher 举办了第二场辩论。这次…

数字孪生城市应用【案例集】,附下载

来源:中国信通院等数字孪生城市经过三年的概念培育期,目前已经步入落地实施阶段,各地不同程度地推进数字孪生城市规划建设和行业应用创新实践。中国信息通信研究院联合数字孪生城市生态圈合作伙伴,在推出《数字孪生城市白皮书&…

安乐高机器人图纸_乐高机器人拼装图纸 | 手游网游页游攻略大全

发布时间:2015-12-26这是一个非常酷的乐高机器人,可以绘画的机器人.意大利工程师Daniele Benedettelli制造了这个乐高机器人,称其为"LEGONARDO".他的绘画动作是通过编程实现的,他将不会停止,直到你 ...标签:游戏资讯 八卦杂谈发布时间&#xf…

重磅!中国微纳机器人技术取得新突破,实现肿瘤的可视化精准治疗!

来源:机器人大讲堂科技的发展会带动相关领域共同进步,在科技进步越来越快的今天,一项技术的进步往往会同时打开好几个领域的技术难关,产生连锁反应,科技的边界也逐渐模糊,以新材料石墨烯的研究为例&#xf…

什么是本体论?

来源:人机与认知实验室【世界有无本体还是互为本体?这是两个非常有意思的问题,从牛顿绝对主义角度应该有,从爱翁相对主义应该无,从未来的发展看,应该是“变”——也许就是“易”?!主…

亚马逊首席技术官预测2021年将改变世界的八大技术趋势

来源:世界科技研究与发展2020年12月17日,亚马逊全球副总裁、首席技术官维尔纳•沃格尔(Werner Vogels)博士在亚马逊re:Invent全球大会上发表压轴演讲,分享了他对2021年科技趋势的预测。回顾2020年,Werner表…

《城市大脑全球标准研究报告2020》摘要内容

‍‍前言:《城市大脑全球标准研究报告2020》12月23在京正式发布,有近70位专家、领导和媒体记者出席了发布会,会后包括新华社、工人日报、中新社、科技日报、中国科学报、中国社会科学报、中国建设报、经济日报、中国经营报、经济观察报&#…

EasyExcel中处理内容占多个单元格

在一些业务需求中内容需要占用多个单元格的情况,如下图: 或者是这样 这样 总有一些奇怪怪的需求。 不过使用EasyExcel可以轻松处理这些变态的需求。EasyExcel中提供了ContentLoopMerge 注解就是为了处理这种问题的。下面先看看如何使用ContentLoopMe…

2021十大科技趋势来了!阿里巴巴达摩院全新发布

来源: 阿里技术阿里巴巴达摩院发布2021十大科技趋势,这是达摩院成立三年以来第三次发布年度科技趋势。2020年是不平凡的一年,经历疫情的洗礼,许多行业重启向上而生的螺旋,但疫情并未阻挡科技前进的脚步,量子…

从GPT-3到DETR,一起来盘点2020有哪些突破?

来源:深度学习技术前沿2020年是巨大飞跃的一年。从OpenAI的GPT-3,再到AlphaFold,都是令人振奋的成就。与此同时,数据科学在机器学习、自然语言处理(NLP)、计算机视觉等领域中蓬勃发展。一起来逐一盘点2020的…

我国5G基站达71.8万个,助力人工智能发展!

来源:新华社2020中国人工智能高峰论坛暨中国人工智能大赛成果发布会23日在厦门举办。论坛上,中国工业和信息化部副部长刘烈宏介绍,截至今年11月,我国累计建成5G基站71.8万个,为人工智能海量数据的成长和传输提供了坚实…

《自然》预测2021年值得关注的科学事件

来源:世界科技研究与发展作者:黄小容2020年12月22日,Nature官网发布了对2021年最值得关注科学事件的预测。1 气候变化问题卷土重来

重磅!基金委发布科研不端行为调查处理办法

编辑 ∑Gemini来源:国家自然科学基金委关于印发《国家自然科学基金项目科研不端行为调查处理办法》的通知国科金发诚〔2020〕96号各局(室)、科学部,机关党委,各直属单位:《国家自然科学基金项目科研不端行为…

不能编程、烧钱、没用?潘建伟直播回应“九章”量子计算争议

来源:腾讯科技在200秒时间内,76个光子穿过中国科学技术大学潘建伟团队精心构筑的光学网络,完成了5000万个样本的高斯玻色采样。而同样一道数学题交给世界上最顶尖 的超级计算机“富岳”,需要6亿年,差距超过了百万亿&a…

2021年,神经科学AI有这几大趋势

来源:The Next Web作者:Tristan Greene编译:科技行者新的一年正向我们招手。延续优良的革命传统,又到了发布最新一期AI专家预测报告的时候。各位受访专家将结合自己的所感所知、实验室发现以及企业动态为我们预测新一年中人工智能…

深度遍历和广度遍历

深度优先 例如下图,其深度优先遍历顺序为 1->2->4->8->5->3->6->7 广度优先 如下图,其广度优先算法的遍历顺序为:1->2->3->4->5->6->7->8 转载于:https://www.cnblogs.com/bigman-bugman/p/920252…