gpt4 book ai didi

ajax - Django:如何让 View 只接受 ajax 请求?

转载 作者:行者123 更新时间:2023-12-05 03:10:26 26 4
gpt4 key购买 nike

我想做的是不允许一般的POST请求,只接受ajax请求。

class CustomerInfoCheckView(View):

def post(self, request, *args, **kwargs):
# CustomerInfoForm by ajax request
if request.is_ajax():
form = CustomerInfoForm(
request.POST,
)

if form.is_valid():
return JsonResponse(
data={
"valid": True,
}
)
else:
return JsonResponse(
data={
"valid": False,
"errors": form.errors
}
)
else:
return Http404

但问题是显示错误:AttributeError:类型对象“Http404”没有属性“get”

我该如何处理?

最佳答案

Http404是个异常(exception),不是 HttpResponse对象,所以你应该提高它而不是返回:

raise Http404

或者,您可以返回 django.http.HttpResponseNotFound这与引发上述异常具有大致相同的效果:

return HttpResponseNotFound("Page not found")

顺便说一下,我会创建一个 custom decorator它检查请求是否是 AJAX,而不是用 if/else 子句污染 View 代码。

您可以使用 method_decorator使自定义装饰器与基于类的 View 一起工作的函数:

from django.utils.decorators import method_decorator

class CustomerInfoCheckView(View):
@method_decorator(ajax_required)
def post(self, request, *args, **kwargs):
...

关于ajax - Django:如何让 View 只接受 ajax 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39969606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com