2012-09-01 33 views
2

我正在使用安裝在pythonanywhere上的django_facebook庫。 當我點擊從一個視圖到另一個鏈接,我得到一個錯誤信息:django_facebook應用程序中的鏈接導致Bad請求:丟失signed_request

400錯誤的請求

缺少signed_request。

有人能告訴我一個鏈接如何在Facebook應用程序中工作嗎?

刪除@canvas_only修飾器並不能解決問題,因爲我需要訪問圖api。

下面的代碼:

views.py:

from django.shortcuts import render 
from django_facebook.decorators import canvas_only 
#from django_facebook.decorators import facebook_required 
#from django.utils.decorators import method_decorator 

from models import Poem, Share 
from django import forms 
from django.views.generic import View 

class PoemEntryForm(forms.Form): 
    words = forms.CharField(widget=forms.widgets.Textarea(), initial='ENTER\nPOEM\nHERE\nONE\nWORD\nPER\nLINE') 

@canvas_only 
def home(request): 
    me = request.facebook.graph.get_object('me') 
    my_username = me['username'] 
    request.session['username'] = my_username 

    try: 
     poems = Poem.objects.filter(user=my_username) 
    except Poem.DoesNotExist: 
     poems = [] 

    # convert poems into tuples of information relevant to the home page 
    # sort them in reverse chronological order 
    # ie: title and created 
    poems = [(poem.title(), poem.created) for poem in sorted(poems, key=lambda poem: poem.created, reverse=True)] 

    try: 
     shared = Share.objects.filter(shared_to=my_username) 
    except Share.DoesNotExist: 
     shared = [] 

    shared = [(poem.title(), poem.user, poem.created) for poem in sorted(shared, key=lambda poem: poem.created, reverse=True)] 

    return render(request, 'home.html', { 
     'me': me, 
     'my_poems': poems, 
     'shared': shared, 
    }) 

class Create(View): 
    #@method_decorator(canvas_only) 
    def get(self, request, *args, **kwargs): 
     #self.me = request.facebook.graph.get_object('me') 
     form = PoemEntryForm(request.GET) 
     return render(request, 'create.html', { 
      'form': form, 
      'debug': request.session['username'] 
     }) 

    #@method_decorator(canvas_only) 
    def post(self, request, *args, **kwargs): 
     if request.session['username']: 
      form = PoemEntryForm(request.POST) 
      poem = Poem() 
      poem.user = request.session['username'] 
      poem.text = request.POST['words'] 
      poem.save() 
      return render(request, 'submitted.html', {}) 
     else: 
      return render(request, 'error_submitting.html', {}) 

submitted.html:

<html> 
    <body> 
     <h3>You submitted a poem</h3> 
     <a href="https://finebitstrings.pythonanywhere.com/">Home</a> 
    </body> 
</html> 

回答

1

所以這筆交易是這樣的。 當Django或者其他答覆回覆:missing signed_request.時,它的真正含義是會話不包含密鑰'signed_request'的輸入。您可以在初始請求的POST數據中找到此請求。將它保存在會話中,你很好走。

相關問題