class CustomerInfoCheckView(LoginRequiredMixin, 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
}
)
正如您在此处所见,它只接受POST
请求。
我想阻止用户使用view
请求访问此GET
。
我找到了@require_http_methods
,但它只支持function-based-view
。
答案 0 :(得分:2)
您必须implement get method in view
才能处理获取请求。否则它将引发405 by default
,这意味着方法未实现。从django.views.generic.view
继承的基于类的视图必须覆盖应该实现的所有方法。在您的情况下,代码可能如下所示。
class CustomerInfoCheckView(LoginRequiredMixin, 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
}
)
def get(self, request, *args, **kwargs):
raise Http404
你可以筹集404,405或提供更合适的error response with 405 as status code
。
答案 1 :(得分:1)
它已经为您完成,因为您只提供了post
方法
来自docs
因为Django的URL解析器希望将请求和关联的参数发送到可调用的函数而不是类,所以基于类的视图有一个as_view()类方法,该方法返回一个函数,当请求到达URL时可以调用该函数匹配相关的模式。该函数创建类的实例并调用其dispatch()方法。 dispatch查看请求以确定它是否为GET,POST等,并且将请求中继到匹配方法(如果已定义),或者如果不是则引发HttpResponseNotAllowed