我想要做的是不允许一般的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: type object 'Http404' has no attribute 'get'
。
我该如何处理?
答案 0 :(得分:3)
Http404
是一个例外,不是HttpResponse
对象,所以你应该引发而不是 return :
raise Http404
或者,您可以返回django.http.HttpResponseNotFound
,其效果与引发上述异常大致相同:
return HttpResponseNotFound("Page not found")
顺便说一下,我会创建一个custom decorator来检查请求是否是AJAX,而不是用if/else
子句污染视图代码。
您可以使用method_decorator
函数使自定义装饰器与基于类的视图一起使用:
from django.utils.decorators import method_decorator
class CustomerInfoCheckView(View):
@method_decorator(ajax_required)
def post(self, request, *args, **kwargs):
...