0

我正在使用 Django 为自己开发一个小型博客应用程序,并且我已经使用https://github.com/GoodCloud/django-ajax-uploader引入了一个文件上传工具。我已经设法让它工作,并且文件上传似乎工作正常。

我现在想在文件上传旁边添加一个(联系)表单,但我不确定如何将表单“链接”到文件上传。所以,我的逻辑是用户填写联系表,然后上传文件(然后显然按下“提交”)。我的问题(不确定我是否说清楚)是如何在联系表单内容(例如姓名、电子邮件 ID 等)与用户使用 django-ajax-uploader 上传的文件之间建立链接. 最有效的方法是什么?

如果有帮助,我计划使用 modelForms 编写(联系人)表单,这显然会将字段写入数据库。但是,django-ajax-uploader 不使用数据库,因此,我不确定如何链接两者。此外,我使用以下说明在我的模型表单中包含了 recapatcha:http: //www.marcofucci.com/tumblelog/26/jul/2009/integrating-recaptcha-with-django/我看到了 recapatcha,但我不确定我的函数 fileup 处理表单。

对此的任何指导都会很棒。谢谢。

更新代码开启:http ://dpaste.com/750619/

4

2 回答 2

1

根据我对您的目标的理解,似乎将您上传的文件在服务器和您的表单连接起来的唯一方法是文件上传器本身返回的响应。

当您从 ajax 文件上传器获得响应时,您必须捕获上传的文件名并将其设置为表单上的隐藏文件。

您的表单可能如下所示:

class MyForm(forms.Form):
    name = forms.CharField()
    email = forms.EmailField()
    the_file = forms.CharField(widget=forms.HiddenInput())

并在您文件的 Javascript 代码中添加到此部分:

...
...,
onComplete: function(id, fileName, responseJSON) {
    if(responseJSON.success) {
        //Note that i add "id_" in front of field name, because django automatically add this when rendering the form.
        $('#id_the_file').val(fileName);
     } else {
        alert("upload failed!");
    }
},
...
...

这样,当用户提交您的联系表单时,至少现在您将文件名放入表单中。

现在您的工作是在发送电子邮件时获取文件的完整 URL,因为到目前为止我们只有文件名,而不是您服务器上的完整文件 url。

然后您可以在邮件中将其作为链接或附件提供。

我希望它有所帮助:) 并为我糟糕的英语感到抱歉......

于 2012-05-20T06:43:38.520 回答
1

您可以在联系表单中显示文件上传按钮的唯一方法是通过其模板,您需要像这样编辑模板:

<form action="/contact/" method="post">{% csrf_token %}

{{ form.as_p }}

<!-- this block is required to show file upload button --->
<div id="file-uploader">       
   <noscript>          
       <p>Please enable JavaScript to use file uploader.</p>
   </noscript>         
</div>
<!-- end file upload button-->

<input type="submit" value="Submit" />
</form>

当您单击提交按钮和上传文件时,它们的请求不同。您的提交表单将由您视图中的“ fileup ”函数处理,文件上传由“ import_uploader ”处理,您不能同时发出此请求。

要使您的联系人模型也保存文件名,那么您必须:

  1. 首先进行文件上传(文件上传器 POST 请求)。
  2. 获取 ajax 文件上传器返回的文件名,并将此值设置为您的“ fnames ”字段。(通过在我的最后评论中使用 js/jquery 技术)。但在这种情况下,您的“ fnames ”字段将呈现为文本字段。这就是我在上一个代码中使用 HiddenInput 的原因,因此它不需要可见但它就在那里。
  3. 现在您可以继续单击表单提交按钮,您的表单将在其中提交文件名。(联系表格 POST 请求

由于模型中的fnames是必需的,因此您必须确保用户在提交整个表单之前已经上传了文件。

于 2012-05-20T15:54:38.217 回答