Python Django facebook应用程序:缺少已签名的请求

Python Django facebook应用程序:缺少已签名的请求,python,django,django-views,django-urls,pythonanywhere,Python,Django,Django Views,Django Urls,Pythonanywhere,受黑客新闻20分钟内写一个facebook应用程序的启发,我正在写一个facebook应用程序,主页运行良好:显示了空的诗歌列表。但是,我在创建从一个视图到另一个视图的链接时遇到问题 我正在使用django,下面是一些代码: 从url.py urlpatterns = patterns('', url(r'^$', 'crosswords.ugly.views.home', name='home'), url(r'^create/$', 'crosswords.ugly.view

受黑客新闻20分钟内写一个facebook应用程序的启发,我正在写一个facebook应用程序,主页运行良好:显示了空的诗歌列表。但是,我在创建从一个视图到另一个视图的链接时遇到问题

我正在使用django,下面是一些代码:

从url.py

urlpatterns = patterns('',
    url(r'^$', 'crosswords.ugly.views.home', name='home'),
    url(r'^create/$', 'crosswords.ugly.views.create', name='create'),
从views.py:

@canvas_only
def create(request):
    if request.method == 'GET':
        return render(request, 'create.html', {
            'form': PoemEntryForm(request.GET)
        })
From:templates:home.html

<p>Would you like to create a <a href="/create/">new poem</a>?</p>
是否要创建一个

请让我知道,如果有任何具体的文件,我可以发布,以发光的问题,我会这样做。我尝试了/create/、/create的各种变体,甚至在url.py和home.html中的链接中创建了/create/

问题是我一直收到这样的信息:

400错误请求

缺少已签名的请求

尝试单击home.html中的链接时。
感谢经验丰富的django、facebook或开发者的任何帮助。

我找到了问题的答案:


问题是我没有使用url.py中定义的
。在这种情况下,
创造了奇迹:)

在花了几个小时试图弄清楚为什么我的网站上有一个简单的链接之后 应用程序页面将弹出可怕的消息“400错误请求-缺少签名请求” 我偶然发现了这篇文章,终于开始解开这个谜

简言之:您不需要在视图中使用任何装饰(例如,仅@canvas\u或@facebook\u required)。相反,正如建议的那样,在您第一次获得该信息(比如FB用户id和姓名)时,将该信息保存在会话中。我在我的主页(唯一用@canvas_装饰的视图)中完成了这项工作。 Nota Bene:为了能够在会话中存储某些内容,您需要在设置中启用它。py:在中间件部分应该已经可以了,但也可以通过取消注释条目“django.contrib.sessions”将其添加到已安装的应用程序中。
现在执行syncdb(python manage.py syncdb)以确保创建了相关的表(我假设会话存储在数据库中)。 如果您需要它来进一步调用FB API,还可以存储access_令牌 在会话中(request.session['signed_request']=access_令牌)

但真正导致问题的是重定向到视图末尾的页面,例如使用redirect()或HttpResponseRedirect()。这会触发GET请求而不是POST。
哦,顺便问一下,我有没有提到所有的GET请求都变成了帖子?哈哈哈,这让人很困惑嘿? 此外,还有一些严重的安全问题需要考虑


我自己刚刚开始玩这些东西,所以请一定把现在的信息当作提示和线索,而不是命令。

很高兴有人觉得它值得一玩!这里有一个原始指南的链接,供感兴趣的人参考