我正在尝试完成geo Django tutorial,这是很老的(1.3)。直到现在我做得很好,但我遇到了一个特定的错误。
我正在尝试构建在db中将一些数据保存到表中的功能。 这是我的观点:
<h1>Forbidden <span>(403)</span></h1>
<p>CSRF verification failed. Request aborted.</p>
当我选择Save按钮时,我收到一个错误(在firebug中):403 Forbidden 现在我知道这与:
有关npm install input-moment --save
但我不知道如何解决它。
答案 0 :(得分:1)
正如@Selcuk建议的那样,在视图函数上使用Django
装饰器csrf_exempt
应该可以解决这个问题。但是,请注意它不会保护您的请求免受CSRF
攻击
您可以详细了解其工作原理here。
# Import django modules
from django.http import HttpResponse
# import csrf_exempt
from django.views.decorators.csrf import csrf_exempt
# Import system modules
import simplejson
# Import custom modules
from googlemaps.waypoints.models import Waypoint
@csrf_exempt
def save(request):
'Save waypoints'
for waypointString in request.POST.get('waypointsPayload', '').splitlines():
waypointID, waypointX, waypointY = waypointString.split()
waypoint = Waypoint.objects.get(id=int(waypointID))
waypoint.geometry.set_x(float(waypointX))
waypoint.geometry.set_y(float(waypointY))
waypoint.save()
return HttpResponse(simplejson.dumps(dict(isOk=1)), mimetype='application/json')
答案 1 :(得分:1)
解决此问题的正确方法是在Django模板中添加{%csrf_token%}。你需要一个表单标签才能工作,无论如何都应该有一个。否则,浏览器如何知道将数据发送到何处?
<form action="" method="post">
{% csrf_token %}
<input id=saveWaypoints type=button value=Save disabled=disabled>
</form
Django文档有很多关于CSRF如何工作以及它为什么重要的好信息: https://docs.djangoproject.com/en/1.9/ref/csrf/#how-to-use-it