如何将外部HTML文件的表单数据发送到Django?

1 投票
1 回答
915 浏览
提问于 2025-04-20 14:30

我想从一个外部的HTML文件(不在Django项目内)发送表单数据到Django数据库,但我需要在这个表单中传递一个CRSK令牌。如果是在Django项目内部的表单,这个过程非常简单,但因为这个表单在Django外部,所以做法就不一样了。在视图中,我有这个:

def coords_save(request):
    if request.is_ajax:
        form = UbicacionForm(request.POST)
        if form.is_valid():
            form.save()
            ubicaciones = Ubicacion.objects.all().order_by('-fecha')
            data = '<ul>'
            for ubicacion in ubicaciones:
                data += '<li>%s %s</li>' % (ubicacion.nombre, ubicacion.user)
            data += '</ul>'
            return HttpResponse(simplejson.dumps({'ok':True,'msg':data}),mimetype='application/json')
        else:
            return HttpResponse(simplejson.dumps({'ok':False,'msg':'debes llenar los campos'}),mimetype='application/json')

这是HTML代码:

<script>
$('#form_coords').submit(function(e){
        e.preventDefault();
        $.post('/coords/save',$(this).serialize(),function(data){
            if (data.ok){
                $('#data').html(data.msg);
                $('#form_coords').each(function(){
                this.reset();
            });
                }
            else{
                   alert(data.msg);
            }
        }, 'json');         
});
</script>
</head>
<body>

<form action="linktodjangourl" id="form_coords" method="post">
<input type="text" id="nombre"/>
<input type="submit" value="enviar"/>
</form>

1 个回答

1

如果你不想在表单上使用CSRF保护,可以在你的表单上使用csrf_exempt这个装饰器1

from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse

@csrf_exempt
def my_view(request):
    return HttpResponse('Hello world')

但是在关闭这个保护之前,确保你了解一下CSRF是什么,并在你的视图中采取一些安全措施,以防止恶意的表单提交。

1 : https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#django.views.decorators.csrf.csrf_exempt

撰写回答