Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django:双文件上传:js和html_Django_Http Headers - Fatal编程技术网

django:双文件上传:js和html

django:双文件上传:js和html,django,http-headers,Django,Http Headers,我有两款django车型: class Image(models.Model): name = models.CharField(max_length=100) photo = models.ImageField(upload_to='upload/', blank=True) class Preview(models.Model): photo = models.ImageField(upload_to='preview', blank=True) 然后,我使用M

我有两款django车型:

class Image(models.Model):
    name = models.CharField(max_length=100)
    photo = models.ImageField(upload_to='upload/', blank=True)

class  Preview(models.Model):
    photo = models.ImageField(upload_to='preview', blank=True)
然后,我使用ModelForm创建ImageForm并在html模板中呈现它。 我想在页面中进行图像预览。 我用

所以,在javascipt的帮助下,我将图像发送到服务器,在预览视图中调整它的大小-它处理PreviewForm,保存在磁盘上并返回插入img标记的url。它起作用了

在我按下提交按钮后,我无法在我的视图中接收图像文件编辑哪个进程ImageForm:request.FILES为空!!! 当我用js的编辑视图禁用上传图像时,效果很好:request.FILES包含图像,我可以保存它


是什么导致第二次POST请求中的request.FILES消失?

您需要了解的第一件事是HTTP是无状态协议。客户机向服务器发出的每个请求都是唯一的,并且独立于前一个请求

在您的情况下,您可以提交包含要上载的图像的表单,并进行上载,以便您可以在request.FILES中查看该图像并显示其预览

但是,一旦您上传并显示新页面,当然request.POST将为空,因为您没有上传任何内容,该文件已经在您的服务器中,等待批准

正确的解决方案是,在准备预览时,创建一些隐藏的输入字段,这将帮助您确定要批准的照片。在这种情况下,唯一ID非常好。此外,除非您是唯一使用该应用程序的人,否则不要将文件路径直接暴露给您的客户端


然后在第二个请求中,检索那些隐藏字段,找到图像并执行您要执行的操作;在您的情况下,请批准并以某种方式将其公开。

>但是,一旦您上传并显示新页面,request.POST当然将为空-我不显示新页面。页面不重新加载,其他post变量名。。存在于request.POST中!无论您是通过javascript还是常规方式进行上传,这都无关紧要。这是协议。其他字段之所以存在,是因为它们仍然在页面中,它们被再次发送到服务器,而文件没有再次上传。是的,他使用了ajax,与页面重新加载无关
<script src="/static/js/jquery.ui.widget.js"></script>
<script src="/static/js/jquery.iframe-transport.js"></script>
<script src="/static/js/jquery.fileupload.js"></script>
<script>
    $(function () {
        $('#id_photo').fileupload({
            dataType: 'json',
            url: '{% url preview %}',
            always: function (e, data) {
                $('#preview').css({'visibility': 'visible'});
                $('#preview').prepend('<img src=/static/'+data.result.url+' />')
            }
        });
    });
</script>

    <form method="POST" action="edit/" enctype="multipart/form-data">
    <div class="field">
        {{ form.photo.errors }}
        <label for="id_photo">Photo:</label>
        <input type="file" name="photo" id="id_photo" >
    </div>

    <div id="preview">
    </div>

    <input type="submit" name="Change">