「CSRFCookieが設定されていません」という問題が発生しています。必要なのは、外部課金プラットフォームが更新をDjangoサーバーに送信することです。ローカルではPostmanで動作しますが、デモサーバーでは動作しません...
# views.py
from Django.views.decorators.csrf import csrf_exempt
from Django.http import JsonResponse
@csrf_exempt
def postback(request):
print(request.POST)
return JsonResponse({'ok': 'hoooh!'})
# urls.py
from Django.conf.urls import url
from billing import views
urlpatterns = [
url(r'^postback/$', views.postback),
]
Forbidden (CSRF cookie not set.): /billing/postback/
[21/Jul/2016 10:49:21] "POST /billing/postback/ HTTP/1.1" 403 2682
https://requestb.in/p0rihap0?inspect#t67d6c
設定ファイルでCSRF_COOKIE_SECURE
をTrue
に設定した場合、Cookieは「安全」とマークされるため、HTTPS接続が必要になります。
そのため、このエラーが発生します。
詳細については ここ 。
私はここで解決策を見つけました: Django Rest Frameworkはcsrfを削除します
システムの一部でDRFを使用していますが、CSRFエラーが生成され、csrf_exemptデコレータが無視されていた可能性があります。
助けてくれてありがとう!
Urls.pyを変更します
Urls.pyでルートを管理している場合は、目的のルートをcsrf_exempt()でラップして、CSRF検証ミドルウェアから除外できます。
from Django.conf.urls import patterns, url
from Django.views.decorators.csrf import csrf_exempt
from . import views
urlpatterns = patterns('',
url(r'^object/$', csrf_exempt(views.ObjectView.as_view())),
...
)
Views.pyで
class ObjectView(CreateView):
def post(self, request):
if request.method == 'POST':
#enter you view