繁体   English   中英

ajax post上的django-csrf保护

[英]django-csrf protection on ajax post

我正在使用django 1.7和python 2.7。 为了防止对ajax发布请求的csrf攻击,我在发送前在ajax标头中添加了csrf令牌。 在视图中,我添加了csrf_protect装饰器来检查令牌。 在这种情况下,一切正常。 但是在我的项目中,在我未实现csrf令牌的其他视图中内部调用了views.py中的此函数,这导致403错误。所以我只想在有ajax post调用时必须检查csrf_protect装饰器。 其他电话都可以忽略。

def check_token(func):
        def wrapper(request, *args, **kwargs):
            if request.is_ajax():
                return csrf_protect(func(request,*args, **kwargs))
            return func(request,*args, **kwargs )
        return wrapper

@check_token
def myViews(request,mob,id):
"""function starts here"""

您的装饰器相当于

myViews = check_token(myViews)

您可以将其手动应用于新名称:

def unprotected_view(request,mob,id):
    """function starts here"""
    ...

protected_view = check_token(unprotected_view)

现在,您有一个装饰的和非装饰的名称。

从其他视图中调用视图并不是Django视图真正应该做的。 如果您具有一些通用功能来制定响应,请将该功能设为单独的功能。 然后让受保护的视图调用该函数,而其他视图也调用该函数:

@csrf_protect
def my_view(request, mob, id):
     return craft_generic_response(request, mob, id)

def craft_generic_response(request, mob, id)
     # do stuff to create response
     return response

def another_view(request, mob, id):
     # do stuff
     response = craft_generic_response(**kwargs)
     # do more stuff

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM