当前位置:  开发笔记 > 后端 > 正文

Django-自定义装饰器,仅允许ajax请求

如何解决《Django-自定义装饰器,仅允许ajax请求》经验,为你挑选了2个好方法。

我的项目中只有很少的视图仅由ajax调用,因此我需要检查一下是否仅在请求为ajax时才处理视图。所以我想到了写一个装饰器。在寻找类似类型的装饰器时,我碰到了很少,但什么都不知道。我使用基于类的视图,并将在get / post方法上使用此装饰器。我确实发现了一些代码片段,但是所有代码片段都是针对基于函数的视图编写的,这使我更加难以理解,因为我从未使用过基于函数的视图。

我只需要知道装饰器背后的想法是什么,以及它是如何工作的。



1> doru..:

谷歌搜索后,我发现了这个:

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():
    ......



2> Harshil jain..:
    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

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有