![](/img/trans.png)
[英]Django csrf in ajax POST (csrf cookie not set until {{csrf}} used)
[英]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.