ajax pos上的Djangocsrf保护

2024-05-15 00:30:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发django1.7和python2.7。为了防止对ajax post请求的csrf攻击,我在发送之前在ajax头中添加了csrf令牌。 在视图中,我添加了csrf\u protect decorator来检查令牌。在这种情况下一切正常。但在我的项目中视图.py在我还没有实现csrf令牌的其他视图中被内部调用,这导致403错误。所以呢我想做的是只有在有ajax后调用时才必须检查csrf\u protect decorator。其他电话都可以忽略。你知道吗

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"""

Tags: token视图returnrequestdefcheckargsajax
2条回答

你的装饰师相当于

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

相关问题 更多 >

    热门问题