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

标签 ajax django

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

相关文章:

javascript - 从 Web Worker 发出 AJAX 请求是否可行?

php - AJAX 与 php 的基本用法用于数据库更新和检索

python - DRF auth_token : "non_field_errors": [ "Unable to log in with provided credentials."

javascript - 为什么单击一个按钮会影响 jQuery Ajax 中的所有按钮

javascript - 404 not found - JS 未向 PHP 发送变量

javascript - AJAX 调用后在 Rails 中渲染部分时未定义的表单变量

Django - 在多个数据库之间同步数据

python - 在 Django 中自动生成自定义迁移

django - Django Oscar 的商店信用/虚拟货币应用程序?

python - django 错误记录 : [Errno 13] Permission denied