2016-10-11 51 views
2

我想要做的是不允许一般POST请求,只接受ajax请求。Django:如何让视图只接受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'

我该如何处理?

回答

3

Http404是一个例外,而不是HttpResponse对象,所以你应该提高它的代替回报

raise Http404 

或者,您也可以返回django.http.HttpResponseNotFound具有大致为提高上述例外同样的效果:

return HttpResponseNotFound("Page not found") 

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

您可以使用method_decorator功能,使基于阶级享有定制的装饰工作:

from django.utils.decorators import method_decorator 

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

可这也适用于基于功能的看法? – BRHSM

相关问题