4

受 Hacker News 20 分钟内写一个 facebook 应用程序的启发,我正在编写一个 facebook 应用程序,主页运行良好:显示空的诗歌列表。但是,我无法创建从一个视图到另一个视图的链接。

我正在使用 django,这里有一些代码:

来自 urls.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)
        })

来自:模板:home.html

<p>Would you like to create a <a href="/create/">new poem</a>?</p>

请让我知道是否有任何特定文件可以发布以阐明问题,我会这样做。我在 urls.py 和 home.html 中尝试了 /create/、/create 甚至 create/ 的各种变体。

问题是我不断收到此消息:

400 错误请求

缺少签名请求。

尝试单击 home.html 中的链接时。经验丰富的 django、facebook 或开发人员的任何帮助将不胜感激。

4

2 回答 2

2

我找到了问题的答案:

问题是我没有<a href="site{% url url_name %}">...按照 urls.py 中的定义使用。在这种情况下,创造了<a href="site{% url create %}">...奇迹:)

于 2012-09-01T01:22:28.227 回答
0

在花了几个小时试图弄清楚为什么我的应用页面上的一个简单链接会带来可怕的消息“400 Bad Request - Missing signed_request”之后。我遇到了这个帖子,我终于开始解谜了。

单击链接时缓慢加载 Facebook 画布应用程序(如果目标顶部)

简而言之:您不需要在视图上使用任何装饰器(例如@canvas_only 或@facebook_required)。相反,正如建议的那样,在您第一次获得该信息(例如 FB 用户 ID 和名称)时,将信息保存在会话中。我是在我的主页上做的(唯一一个用@canvas_only 装饰的视图)。注意事项:为了能够在会话中存储某些内容,您需要在 settings.py 中启用它:在 MIDDLEWARE 部分中应该已经可以了,但也可以通过取消注释条目 'django. contrib.sessions'。
现在执行一个同步数据库(python manage.py syncdb)以确保创建了相关表(我假设会话存储在数据库中)。如果您需要它来进一步调用 FB API,还将 access_token 存储在会话中(request.session ['signed_request'

但是,真正导致问题的原因是重定向到视图末尾的页面,例如。使用redirect() 或使用HttpResponseRedirect()。这会触发 GET 请求而不是 POST。
哦,顺便说一句,我有没有提到所有的 GET 请求都变成了 POSTS?哈哈哈它变得混乱嘿?此外,还有一些严重的安全隐患需要考虑。

我自己也刚开始玩这些东西,所以请把目前的信息当作提示和线索,而不是诫命。

于 2013-03-14T01:06:01.853 回答