受黑客新闻在20分钟内写一个Facebook应用程序应用程序的启发,我正在编写一个Facebook应用程序,并且主页工作正常:显示空的列表。但是,我在创建从一个视图到另一个视图的链接时遇到了问题。
我使用django,这里有一些代码:
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)
})
发件人:templates:home.html
<p>Would you like to create a <a href="/create/">new poem</a>?</p>
请告诉我是否有任何特定文件可以发布以解决问题,我会这样做。我尝试了/ create /,/ create,甚至create / in urls.py以及home.html中的链接的各种变体。
问题是我不断收到这条消息:
400错误请求
缺少signed_request。
尝试点击home.html中的链接时。 经验丰富的django,facebook或者开发者的任何帮助都会受到赞赏。
答案 0 :(得分:2)
我找到了问题的答案:
问题是我没有使用urls.py中定义的<a href="site{% url url_name %}">...
。在这种情况下,<a href="site{% url create %}">...
创造了奇迹:)
答案 1 :(得分:0)
花了几个小时试图找出为什么我的一个简单的链接 应用程序页面会显示可怕的消息&#34; 400 Bad Request - Missing signed_request。&#34; 我遇到了这个帖子,我终于开始解决这个谜语了。
Slow load facebook canvas app when click on links (if target top)
简而言之:您不需要在视图上使用任何装饰器(例如@canvas_only或@facebook_required)。相反,正如建议的那样,在您第一次获取该信息时(例如FB用户ID和名称),将信息保存在会话中。我在我的主页(用@canvas_only装饰的唯一视图)中进行此操作。
Nota Bene:为了能够在会话中存储某些内容,您需要在settings.py中启用它:它已经在MIDDLEWARE部分中可以正常,但也可以通过取消注释条目&#39将其添加到INSTALLED_APPS中; django.contrib.sessions&#39 ;.
现在执行syncdb(python manage.py syncdb)以确保创建相关表(我假设会话存储在db中)。
如果需要它来进一步调用FB API,还要存储access_token
在会话中(request.session [&#39; signed_request&#39;] = access_token)
真正导致问题的是,重定向到视图末尾的页面,例如。使用redirect()或HttpResponseRedirect()。这会触发GET请求,而不是POST 哦顺便问一下,我提到所有的GET请求都成了POSTS吗?哈哈哈,这令人困惑嘿? 此外,还有一些严重的安全问题需要考虑。
我自己刚开始玩这些东西,所以请把现在的信息作为提示和线索而不是诫命。