我正在尝试为客户端的fb页面创建一个简单的,仅限HTML的Facebook应用程序。我想使用django的flatpages,以便客户和他的员工可以通过他们网站的django管理员更改应用程序的内容。问题是Django返回403“CSRF验证失败。请求中止。”当facebook尝试发送自己的POST信息并访问该应用的网址时出错。
我已经了解了@csrf_exempt装饰器,但我不确定如何将它应用于平面视图,因为它位于django.contrib代码中。此外,我只想在视图被要求调用特定的facebook.html模板(而不是default.html模板)时禁用csrf保护。例如,恰好有{%crsf_exempt%}模板标签,那将是完美的。
有人能想出解决这个问题的方法吗?或者也许我应该放弃使用django-flatpages来为facebook应用程序提供服务的想法?
答案 0 :(得分:1)
尝试在名为facebook的视图上使用此装饰器:
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
这将禁用该视图上的csrf保护。 这有帮助吗?
答案 1 :(得分:0)
我遇到了和你一样的问题。我想为flatpages(而不是网站的其余部分)播放csrf,最后得到以下中间件:
class DisableCSRFOnFlatPages(object):
def process_request(self, request):
try:
FlatPage.objects.get(url=request.META.get('PATH_INFO'))
setattr(request, '_dont_enforce_csrf_checks', True)
except FlatPage.DoesNotExist:
return
将其添加到您的设置中,只要有平面页,就应该禁用csrf检查。