我的项目中只有很少的视图仅由ajax调用,因此我需要检查一下是否仅在请求为ajax时才处理视图。所以我想到了写一个装饰器。在寻找类似类型的装饰器时,我碰到了很少,但什么都不知道。我使用基于类的视图,并将在get / post方法上使用此装饰器。我确实发现了一些代码片段,但是所有代码片段都是针对基于函数的视图编写的,这使我更加难以理解,因为我从未使用过基于函数的视图。
我只需要知道装饰器背后的想法是什么,以及它是如何工作的。
谷歌搜索后,我发现了这个:
from django.http import HttpResponseBadRequest def ajax_required(f): """ AJAX request required decorator use it in your views: @ajax_required def my_view(request): .... """ def wrap(request, *args, **kwargs): if not request.is_ajax(): return HttpResponseBadRequest() return f(request, *args, **kwargs) wrap.__doc__=f.__doc__ wrap.__name__=f.__name__ return wrap
没有尝试过,所以您必须尝试一下。基本部分是request.is_ajax()
检查请求是否通过AJAX发出的。还要检查文档以获取有关is_ajax()
方法的更多信息。
编辑
要在Django中装饰视图类,请参阅在文档中装饰类。基本上,装饰器函数包装类的方法。因此,您可以使用django @method_decorator()
在装饰器函数(ajax_required
)中包装一个方法:
@method_decorator(ajax_required) def method_you_want_to_get_only_AJAX_requests(): ......
from django.core.exceptions import PermissionDenied def require_ajax(view): @wraps(view) def _wrapped_view(request, *args, **kwargs): if request.is_ajax(): return view(request, *args, **kwargs) else: raise PermissionDenied() return _wrapped_view