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编辑部摘选其中跟脑科学相关的文章,跟大家一起…

Leetcode--191. 位1的个数

编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。 示例 1: 输入:00000000000000000000000000001011 输出:3 解释:输入的二进制…

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

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

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

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

Leetcode--190. 颠倒二进制位

颠倒给定的 32 位无符号整数的二进制位。 示例 1: 输入: 00000010100101000001111010011100 输出: 00111001011110000010100101000000 解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596, 因此返回 964176192&…

python意外缩进引发逻辑错误_python – IndentationError:意外的缩进错误

我是Python的新手,我得到这个错误:Traceback (most recent call last):File "/usr/local/bin/scrapy", line 4, in execute()File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scrapy/cmdline.py&qu…

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

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

六月中旬的心得

六月一眨眼的时间就来到了中旬,时间流逝之快让我们有些措手不及,炎热的天气更是加剧了小组里每个人的焦虑,也因此有了更大的动力与决心去完成自己的工作。 自己的工作是这个游戏的前端,需要完成的任务是做出来登录等一系列的用户界…

Leetcode--461. 汉明距离

两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y&#xff0c;计算它们之间的汉明距离。 注意&#xff1a; 0 ≤ x, y < 231. 示例: 输入: x 1, y 4 输出: 2 解释: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ 上面的箭…

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

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

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

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

心得感悟

心得感悟 软件工程 新增内容 五月底到六月中旬&#xff0c;在这段时间内团队项目终于走上正轨&#xff0c;我们的项目是做一个实验室发布平台&#xff0c;但是如果单单做成一个门户网站是远远不够的&#xff0c;于是我们在传统的门户网站上增加了部分功能&#xff08;还没有实现…

Leetcode--231. 2的幂

给定一个整数&#xff0c;编写一个函数来判断它是否是 2 的幂次方。 示例 1: 输入: 1 输出: true 解释: 20 1 示例 2: 输入: 16 输出: true 解释: 24 16 示例 3: 输入: 218 输出: false 菜鸡方法&#xff1a; class Solution { public boolean isPowerOfTwo(int n)…

java字符串数组排序_在Java中对字符串数组进行排序

允许用户使用字符串数组.他们可以向数组添加字符串,从数组中删除字符串,搜索数组中的字符串,最终他们将能够对数组进行排序.分类是搞砸我的原因.我尝试过几种不同的方法.第一种方法是将数组转换为ArrayList,并使用Collections对ArrayList进行排序,ArrayList将转换回静态类数组.…

什么是本体论?

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

关于激活Windows10专业版2018长期服务版

之前重装了一次系统&#xff0c;偷懒用了小白一键重装&#xff0c;装好之后显示的是Windows10专业版2018长期服务版&#xff0c;当时也没想太多就放着用了。 然后 &#xff0c;这几天一直提示 “你的windows许可证即将过期” &#xff0c;就按照网上的一些教程来但是一直出错&…

php java 通信_PHP与Java进行通信的实现方法

缘起&#xff1a;最近做了一个电商平台与网银整合的小东西&#xff0c;程序是开源的 Ecmall的&#xff0c;网银的接口也很规范&#xff0c;给出的文档很全&#xff0c;唯一的小问题是&#xff0c;网银使用的签名和验签的lib是只有java和c的&#xff0c;对java还熟悉一些&#x…

Leetcode--397. 整数替换

给定一个正整数 n&#xff0c;你可以做如下操作&#xff1a; 1. 如果 n 是偶数&#xff0c;则用 n / 2替换 n。 2. 如果 n 是奇数&#xff0c;则可以用 n 1或n - 1替换 n。 n 变为 1 所需的最小替换次数是多少&#xff1f; 示例 1: 输入: 8 输出: 3 解释: 8 -> 4 ->…