타사 서버의 POST
이 필요합니다. 제 3 자 서버의 게시물을 허용하려면 @csrf_exempt
데코레이터를 사용해야 함을 이해합니다. 나는 Ubuntu 12.04에서 Django 1.4와 Python 2.7을 사용하고 있습니다.@csrf_exempt 사용 및 동일한보기에서 CSRF 토큰 생성
이제 내보기는 원래 POST
의 정보가 들어있는 숨겨진 필드뿐만 아니라 사용자가 채울 필드를 포함 할 바인드되지 않은 양식을 생성합니다. 따라서 첫 번째 POST
은 두 번째 POST
을 시작합니다.
두 번째 POST
은 내 서버에서 내 서버의 다른보기로 전송됩니다. 내 양식에 CSRF
토큰을 생성하는 방법을 알아 내려고하고 있습니다.
나는 정확히 documentation에서 읽은 것을 시도하고 있습니다. views.py에서
내 코드 :
지금 템플릿 측에서 할 일을from django.core.context_processors import csrf
from django.shortcuts import render_to_response
from gateway_interface.post_handling import PostHandling
@csrf_exempt
def requestNewPaymentInfo(request):
c = {}
c.update(csrf(request))
# Gather information posted
if (request.method == "POST"):
# Create the initialization dictionary based on POST values
postHandling = PostHandling()
post_dict = postHandling.createDictionary(request)
# Create the form
form = addPaymentForm(initial = post_dict)
return render_to_response('requestNewPaymentInfo.html', { 'form' : form }, c)
?!? 다시 말하지만, 문서에서 나는 다음을 수행해야한다고 생각 :
<form action="/addPayment/" method="post">
{% csrf_token %}
</form>
내가 제 3 자 서버에서 POST
을 수행하여이 문제를 테스트합니다. 때로는 양식이 유효한 CSRF
토큰으로 보이는 것으로 생성 된 것을 볼 수 있습니다. 나는이 오류까지 얻을 계속 나는 CSRF verification failed
오류가 발생하면
Forbidden (403)
CSRF verification failed. Request aborted.
:
Django Version: 1.4
Python Version: 2.7.3
Installed Applications:
('django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'gateway_interface')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware')
Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/csrf.py" in wrapped_view
77. return view_func(*args, **kwargs)
File "/home/tokeniz/tokeniz/gateway_interface/views.py" in requestNewPaymentInfo
64. return render_to_response('requestNewPaymentInfo.html', { 'form' : form }, c)
File "/usr/local/lib/python2.7/dist-packages/django/shortcuts/__init__.py" in render_to_response
20. return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/template/loader.py" in render_to_string
178. context_instance.pop()
Exception Type: TypeError at /requestNewPaymentInfo/
Exception Value: pop expected at least 1 arguments, got 0
가 그럼 난 결국이 오류를 얻을 것이다 :
는 가끔 다음과 같습니다 실패를 참조 쿠키를 지우고 다시 시작합니다.
누구든지 내가 뭘 잘못하고 있다고 말할 수 있습니까? 나는 그것이 CSRF
토큰을 어떻게 생성하는지와 관련이 있다는 것을 알 수 있습니다. 문서의 내용을 기반으로 프로세스가 어떻게 작동하는지 이해할 수 없습니다. 내보기에 c
은 무엇입니까? 정보가 채워지고 render_to_response
으로 전달되는 빈 사전. 좋습니다. 그런데 어떻게 템플릿에서 사용하고 있습니까?
<form action="/addPayment/" method="post">
{% c.csrf_token %}
</form>
그렇지 않다면, 왜 :
내 템플릿이 같은 뭔가를해야할까요? 장고는이 c
에 CSRF
토큰이 있다는 것을 어떻게 알 수 있습니까?
도움을 주시면 감사하겠습니다.