Django简单的防止注入的方法
利用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})
暂无评论数据