Django Query的问题

时间:2016-11-22 09:56:26

标签: python django

我正在通过Coding为企业家做一些Django练习。 这是代码:

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from django.views import View

from .models import KirrURL

def kirr_redirect_view(request,shortcode=None,*args,**kwargs):

    #Method 1:

    obj = get_object_or_404(KirrURL, shortcode__iexact=shortcode)
    obj_url = obj.url

    #Method 2:

    qs = KirrURL.objects.filter(shortcode__iexact=shortcode)
    if qs.exists() and qs.count() == 1:
        obj = qs.first()
        obj_url = obj.url

    return HttpResponse("Hello : {sr}".format(sr=obj_url))

我正在做的是从网址获取一些单词并将其传递给kirr_redirect_view,然后查询获取数据并返回一些单词。 该网站介绍了两种方法。第二种方法很好。当我改为第一种方法时。方法突然出错了,即使我传递了正确的关键词,我仍然从页面获得404.

3 个答案:

答案 0 :(得分:2)

根据Django文档:

  

get_object_or_404()

     

在给定的模型管理器上调用 get(),但它会引发Http404而不是模型的DoesNotExist异常。

因此,如果没有匹配的记录,get_object_or_404将会引发404: content not found

如果在您的第​​二种方法中,如果没有匹配即您的if失败,您仍然会发送您的HttResposne对象,默认状态为200: OK

简而言之,您的KireURL模型没有与shortcode__iexact=shortcode匹配的记录。

答案 1 :(得分:0)

第二种方法是显示网址还是只是没有引发错误?过滤器永远不会引发任何异常,并且看起来它有超过1个具有相同短代码的对象,或者没有任何异常,并且如果有条件则进入。这就是get_object_or_404()引发异常的原因。

答案 2 :(得分:0)

我在这里添加一些信息。这是我使用python shell运行代码时得到的。

#!/bin/sh
tmux -2 attach-session -d