2

pythonanywhere にインストールされている django_facebook ライブラリを使用しています。あるビューから別のビューへのリンクをクリックすると、次のエラー メッセージが表示されます。

400不正な要求

signed_request がありません。

Facebookアプリでリンクがどのように機能するかについて簡単に説明してもらえますか?

@canvas_only デコレーターを削除しても、グラフ API にアクセスする必要があるため、問題は解決しません。

コードは次のとおりです。

ビュー.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', {})

submit.html:

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

1 に答える 1

1

それで、取引はこれです。django、または応答を行っているものは何でも: で応答するmissing signed_request.場合、それが実際に意味することは、セッションに key のエントリが含まれていないこと'signed_request'です。このリクエストは、最初のリクエストの POST データにあります。セッションに保存すれば、準備完了です。

于 2012-09-01T18:49:58.723 に答える