日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

django http404 详解

發布時間:2024/7/19 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的django http404 详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。