利用int方法

YourModel.DoesNotExist是一个异常类,用于表示查询类YourModel的数据时没有找到对应的记录。

from django.http import Http404

def setdic(request, setid):
    try:
        setid = int(setid)
        set = YourModel.objects.get(id=setid)
    except (ValueError, YourModel.DoesNotExist):
        raise Http404("Set does not exist")
    
    return render(request, 'setdic.html', {'set': set})

get_object_or_404方法

使用Django的get_object_or_404方法来获取YourModel对象,如果setid不是一个合法的整数,会捕获ValueError异常,如果找不到对应的YourModel对象,则会直接返回404页面,避免了注入风险。

from django.shortcuts import get_object_or_404
from .models import YourModel

def setdic(request, setid):
    try:
        setid = int(setid)
        set = get_object_or_404(YourModel, id=setid)
    except ValueError:
        raise Http404("Invalid setid")
    
    return render(request, 'setdic.html', {'set': set})

利用QuerySet的filter方法

首先尝试将setid转换为整数类型,如果转换失败会抛出ValueError异常。然后使用filter方法过滤id为setid的YourModel对象,再通过first方法获取第一个匹配的对象。最后进行一次None检查,确保找到了对应的YourModel对象。如果未找到合法的YourModel对象,则返回404页面。

from django.http import Http404
from .models import YourModel

def setdic(request, setid):
    try:
        setid = int(setid)
    except ValueError:
        raise Http404("Invalid setid")

    try:
        set = YourModel.objects.filter(id=setid).first()
    except YourModel.DoesNotExist:
        raise Http404("Set does not exist")

    if set is None:
        raise Http404("Set does not exist")

    return render(request, 'setdic.html', {'set': set})
分类: Django 标签: django

评论

暂无评论数据

暂无评论数据

目录