4

Hacker News の write a facebook app app in 20 minutes に触発されて、私は 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)
        })

From: テンプレート: home.html

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

問題を明らかにするために投稿できる特定のファイルがあれば教えてください。そうします。/create/、/create、さらには create/ のさまざまなバリエーションを urls.py と home.html のリンクで試しました。

問題は、次のメッセージが表示され続けることです。

400不正な要求

signed_request がありません。

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 セクションで既に OK である必要がありますが、エントリ 'django. contrib.sessions'.
ここで、syncdb (python manage.py syncdb) を実行して、関連するテーブルが作成されていることを確認します (セッションが db に保存されていると仮定します)。FB API をさらに呼び出すために必要な場合は、access_token もセッションに保存します (request.session ['signed_request'

ただし、実際に問題を引き起こすのは、ビューの最後にあるページにリダイレクトすることです。redirect() または HttpResponseRedirect() を使用します。これにより、POST ではなく GET リクエストがトリガーされます。
ところで、すべての GET リクエストが POSTS になると言いましたか? ハハハハハハハハハハハハハハハハハハハハハハハハハハハ。さらに、考慮すべき重大なセキュリティ上の影響がいくつかあります。

私は自分でこのようなものを使い始めたばかりなので、現在の情報を戒めとしてではなく、ヒントや手がかりとして受け取ってください.

于 2013-03-14T01:06:01.853 に答える