我想做的是不允许一般的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/