2

我正在尝试为客户的 fb 页面创建一个简单的、仅限 html 的 facebook 应用程序。我想使用 django 的平面页面,以便客户和他的员工可以通过他们网站的 django 管理员更改应用程序的内容。问题是 Django 返回 403“CSRF 验证失败。请求中止。” 当 facebook 尝试发送自己的 POST 信息并访问应用程序的 url 时出错。

我已经知道 @csrf_exempt 装饰器,但我不确定如何将它应用到平面视图,因为它在 django.contrib 代码中。此外,当视图被要求调用特定的 facebook.html 模板(不是 default.html 模板)时,我只想禁用 csrf 保护。例如,如果碰巧有一个 {% crsf_exempt %} 模板标签,那就完美了。

谁能想到解决这个问题的方法?或者也许我应该放弃使用 django-flatpages 为 facebook 应用程序提供服务的想法?

4

2 回答 2

1

尝试在称为 facebook 的视图上使用此装饰器:

from django.views.decorators.csrf import csrf_exempt
@csrf_exempt

这将禁用该视图上的 csrf 保护。这有帮助吗?

于 2011-03-24T05:51:11.930 回答
0

我遇到了和你完全相同的问题。我想为平面页面禁用 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 检查。

于 2012-01-06T05:28:40.283 回答