Django在不刷新页面的情况下提交表单

Django submit form without page refresh

本文关键字:情况下 提交 表单 刷新 Django      更新时间:2023-12-31

我正在使用Django Angular,并试图发布表单并在后端获取数据。。我能够做到这一点,但发现页面在保存表单时正在重新加载。如果没有页面渲染,我们如何实现这一点?

forms.py

def home(request):
    if 'application/json' in request.META['CONTENT_TYPE']:
        print 'hi'
        print request.body
    return render(request, 'home.html', {})

home.html

<form name="indexForm" ng-submit="submitForm()">
    <div class="form-group">
        <label>File Path</label>
        <input type="text" name="path" class="form-control" ng-model="file.path">
    </div>
    <div class="form-group">
        <label>File Name</label>
        <input type="text" name="file_name" class="form-control" ng-model="file.file_name">
    </div>
    <div class="form-group">
        <label>ext</label>
        <input type="text" name="ext" class="form-control" ng-model="file.ext">
    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
</form>

脚本

$scope.submitForm = function() {
    console.log('from submit')
    $http({
        url: 'http://127.0.0.1:8000/',
        data: $scope.file,
        method: 'POST',
        headers: {
            'X-CSRFToken': $cookies['csrftoken']}
    })
    }

请让我知道上面的代码是发布数据的正确方式?我们如何在不刷新页面的情况下将数据从角度发布到后端(django)

提前感谢。。。任何帮助都非常感谢

在主页请求中,您不应该再次呈现页面,而应该向客户端返回一个字符串或一些JSON。如果你使用的是django的新版本,你可以这样做:

from django.http import JsonResponse
def home(request):
if 'application/json' in request.META['CONTENT_TYPE']:
    print 'hi'
    print request.body
    return JsonResponse({'foo':'bar'})
return render(request, 'home.html', {})

type="submit替换为type="button"。然后您可以使用ng-click="ctrl.foo()" 在后端调用任何方法

至少到目前为止我一直在这么做。然而,查看文档表明这不是问题所在。