2012-09-01 40 views
4

受Hack​​er News 20分鐘內寫入Facebook應用程序應用程序的啓發,我正在編寫一個Facebook應用程序,並且主頁正常工作:將顯示空白列表。但是,我無法創建從一個視圖到另一個視圖的鏈接。Django Facebook應用程序:缺少signed_request

我使用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> 

請讓我知道我如果有任何特定的文件可以發佈以解決問題,我會這樣做。我嘗試了/ create /,/ create的各種變體,甚至在urls.py和home.html中創建鏈接。

的問題是,我不斷收到這樣的信息:

400錯誤的請求

缺少signed_request。

當試圖點擊home.html中的鏈接。 經驗豐富的django,facebook或-developers的任何幫助將不勝感激。

+0

很高興有人發現它值得一看!這裏是原始指南的鏈接,對於任何對http://blog.pythonanywhere.com/35/感興趣的人 – hwjp

回答

2

我找到了問題的答案:

的問題是,我沒有使用<a href="site{% url url_name %}">...在urls.py.定義在這種情況下,<a href="site{% url create %}">...奇效:)

0

已經花了幾個小時試圖找出爲什麼我的 應用頁面上的一個簡單的鏈接會帶來了可怕的消息後,「400錯誤的請求 - 缺少signed_request。」 我遇到這個帖子,我終於開始解決謎題。

Slow load facebook canvas app when click on links (if target top)

簡單:你並不需要在您的視圖中使用任何裝飾(如@canvas_only或@facebook_required)。相反,如建議的那樣,在第一次獲得該信息(例如FB用戶標識和名稱)時將信息保存在會話中。我在我的主頁(唯一用@canvas_only裝飾的視圖)中執行此操作。 Nota Bene:爲了能夠在會話中存儲某些內容,您需要在settings.py中啓用它:它已經在MIDDLEWARE部分中可以正常使用,但也可以通過取消註釋條目'django'將其添加到INSTALLED_APPS中.contrib.sessions'。
現在執行syncdb(python manage.py syncdb)以確保創建相關表(我假設會話存儲在數據庫中)。 如果你需要它進一步呼籲的FB API,還可以存儲在會話中的access_token (的request.session [「signed_request」] =的access_token)

究竟是什麼造成的問題,但被重定向到一個頁面,在視圖的結尾,例如。與重定向()或HttpResponseRedirect()。這會觸發GET請求而不是POST。
哦順便說一句,我提到所有的GET請求成爲POSTS?哈哈哈,它會讓人困惑嗎?此外,還有一些嚴重的安全隱患需要考慮。

我剛剛開始玩這個東西,所以請把目前的信息作爲提示和線索,而不是作爲誡命。

相關問題