2

私はdjangoプロジェクトを作成し、urls.py、ビューモデルなどをセットアップしました。1つのことを除いて、すべてがうまく機能しています。

urls.py スニペット:

urlpatterns = patterns('',
(r'^$', main_page),
(r'^sendcall/$', sendcall),
(r'^dial_ag/$', dial_ag),

したがって、「/」、「/sendcall/」は、テンプレートフォームから POST 要求を取得していて、そこに csrf_token が存在するため、期待どおりに正常に機能しているため、まったく問題はありません。

これで、この /dial_ag/ URL がアプリから呼び出されることはなくなりました。この URL はサード パーティの API によって呼び出されます (アプリでこの URL を構成したので、この URL に POST 要求が送信されます)。このような場合、views.py のビューdial_agデコレーター@csrf_exemptの下で使用する必要があることがわかりました。そうしないと、サードパーティは常に 403 禁止された応答を取得します。これは、django がこれでも要求に csrf_token が含まれていることを期待しているためです。

それで、私はそれを機能させましたが、 @csrf_exempt の後に @requires_csrf_token を使用してセキュリティ違反を処理することについて、stackoverflow自体を読みました- csrf_token を何らかの方法で内部的に渡し、ビューを次のように保護する方法:

@csrf_exempt
@requires_csrf_token
def my_protected_unprotected_view():
    ...

これは私が立ち往生しているところです。私はこの概念を理解できないか、これを実装する方法についての適切なドキュメントを見つけることができません (はい、django のドキュメントはここでは役に立ちません)。@csrf_exempt だけを使用する必要がないように、urls.py自体からトークンをビューに渡す方法。サードパーティのアプリは、トークンを持っていないはずの私の URL に REQUEST を送信する以外はプロジェクトとは関係ありませんが、@csrf_tokenを使用するのがそのような状況を処理する最良の方法ですか?

4

1 に答える 1

0
  • サード パーティのアプリがデータを変更しない場合は、GET 要求を優先できます。
  • サードパーティのアプリはページで動作しないため、@csrf_exempt を使用できます。ただし、コードには適切な認証および承認メカニズムが必要です。
于 2013-09-19T04:40:38.053 に答える