【发布时间】:2015-07-23 08:02:40
【问题描述】:
我的项目正在处理 Django,有一个功能需要加载文件并在文本区域中显示文件内容。参考下面的代码。 上传一个文件,然后在“Text_To_Show”项目中显示。我不想将文件存储在服务器端或数据库中。所以我的想法是:使用 ajax 将文件(内容)发布到 view.py 然后 HTTPResponse(data) 回到页面。
form.py
class RequestForm(forms.Form):
Text=forms.CharField(label='Text',widget=forms.Textarea(attrs{'cols':80, 'rows':8 }),max_length=2048,required=False)
file = forms.FileField()
Text_To_Show = forms.CharField(label='Text_To_Show',widget=forms.Textarea(attrs={readonly':True}),required=False)
views.py
if request.is_ajax() and request.method == 'POST':
form = RequestCertForm(request.POST,request.FILES)
if form.has_changed():
print request.FILES
return HttpResponse('FileContent')
Javascript
$(document).ready(function(){
$("#id_file").change(function(){
$.ajax({
method : 'POST',
enctype: 'multipart/form-data',
success: function(result){
$("#id_text_to_show").val(result);
},
fail: function(result){
$("#id_text_to_show").val(result);
}
});
});
});
基于文档https://docs.djangoproject.com/en/1.8/topics/http/file-uploads/ 这需要方法“POST”和enctype:'multipart/form-data',但我的问题是为什么我无法从request.FILES获取文件内容(数据)。任何对此有过专长的人。可以告诉我吗?
【问题讨论】:
-
您似乎没有在 ajax POST 中发送任何数据。
-
是的,因为基于 doc ** request.FILES ** 只有在请求方法是 POST 并且发布请求的
-
只是一个问题,但如果您不想存储文件,为什么不在客户端直接使用 javascript 解析它?
-
不,您还没有理解 Ajax 的工作原理。您在 JS 中执行的 POST 与表单本身的内容无关;它是完全分开的。你必须明确告诉 jQuery POST 什么数据,通常使用
data:参数。 -
@zom-pro 是的,尝试使用 FileReader 直接解析文件。而,1,一些浏览器不支持这个Javascript API。 2、直接读取文件不安全
标签: javascript jquery python ajax django