在Django 1.3中,用户上传一个“hello world”应用程序所需的最少示例代码是什么?
当前回答
一般来说,当你试图“只是得到一个工作示例”时,最好是“开始写代码”。这里没有代码来帮助你,所以这使得回答问题对我们来说更加困难。
如果你想抓取一个文件,你需要在一个html文件中找到这样的东西:
<form method="post" enctype="multipart/form-data">
<input type="file" name="myfile" />
<input type="submit" name="submit" value="Upload" />
</form>
这将给你一个浏览按钮,一个上传按钮来开始操作(提交表单),并注意enctype以便Django知道给你请求。文件
在某个视图中,你可以访问该文件
def myview(request):
request.FILES['myfile'] # this is my file
在文件上传文档中有大量的信息
我建议您彻底阅读该页面,然后开始编写代码——当它不起作用时,再返回示例和堆栈跟踪。
其他回答
一般来说,当你试图“只是得到一个工作示例”时,最好是“开始写代码”。这里没有代码来帮助你,所以这使得回答问题对我们来说更加困难。
如果你想抓取一个文件,你需要在一个html文件中找到这样的东西:
<form method="post" enctype="multipart/form-data">
<input type="file" name="myfile" />
<input type="submit" name="submit" value="Upload" />
</form>
这将给你一个浏览按钮,一个上传按钮来开始操作(提交表单),并注意enctype以便Django知道给你请求。文件
在某个视图中,你可以访问该文件
def myview(request):
request.FILES['myfile'] # this is my file
在文件上传文档中有大量的信息
我建议您彻底阅读该页面,然后开始编写代码——当它不起作用时,再返回示例和堆栈跟踪。
我必须说我发现django的文档令人困惑。 还有一个最简单的例子,为什么要提到表单? 我在views.py中工作的例子是:-
for key, file in request.FILES.items():
path = file.name
dest = open(path, 'w')
if file.multiple_chunks:
for c in file.chunks():
dest.write(c)
else:
dest.write(file.read())
dest.close()
html文件看起来像下面的代码,尽管这个例子只上传了一个文件,保存文件的代码处理许多:-
<form action="/upload_file/" method="post" enctype="multipart/form-data">{% csrf_token %}
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
这些示例不是我的代码,它们是从我找到的其他两个示例中选取的。 我是一个相对初学者django,所以很可能我错过了一些关键点。
我也遇到过类似的问题,由django管理站点解决了。
# models
class Document(models.Model):
docfile = models.FileField(upload_to='documents/Temp/%Y/%m/%d')
def doc_name(self):
return self.docfile.name.split('/')[-1] # only the name, not full path
# admin
from myapp.models import Document
class DocumentAdmin(admin.ModelAdmin):
list_display = ('doc_name',)
admin.site.register(Document, DocumentAdmin)
它可能会帮助你: 在models.py中创建一个文件字段
上传文件(在admin.py中):
def save_model(self, request, obj, form, change):
url = "http://img.youtube.com/vi/%s/hqdefault.jpg" %(obj.video)
url = str(url)
if url:
temp_img = NamedTemporaryFile(delete=True)
temp_img.write(urllib2.urlopen(url).read())
temp_img.flush()
filename_img = urlparse(url).path.split('/')[-1]
obj.image.save(filename_img,File(temp_img)
并在模板中使用该字段。
你可以参考Fine Uploader中的服务器示例,它有django版本。 https://github.com/FineUploader/server-examples/tree/master/python/django-fine-uploader
它非常优雅,最重要的是,它提供了特色的js lib。Template不包含在服务器示例中,但是你可以在它的网站上找到demo。 精美上传:http://fineuploader.com/demos.html
django-fine-uploader
views.py
UploadView将post和delete请求分派给各自的处理程序。
class UploadView(View):
@csrf_exempt
def dispatch(self, *args, **kwargs):
return super(UploadView, self).dispatch(*args, **kwargs)
def post(self, request, *args, **kwargs):
"""A POST request. Validate the form and then handle the upload
based ont the POSTed data. Does not handle extra parameters yet.
"""
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
handle_upload(request.FILES['qqfile'], form.cleaned_data)
return make_response(content=json.dumps({ 'success': True }))
else:
return make_response(status=400,
content=json.dumps({
'success': False,
'error': '%s' % repr(form.errors)
}))
def delete(self, request, *args, **kwargs):
"""A DELETE request. If found, deletes a file with the corresponding
UUID from the server's filesystem.
"""
qquuid = kwargs.get('qquuid', '')
if qquuid:
try:
handle_deleted_file(qquuid)
return make_response(content=json.dumps({ 'success': True }))
except Exception, e:
return make_response(status=400,
content=json.dumps({
'success': False,
'error': '%s' % repr(e)
}))
return make_response(status=404,
content=json.dumps({
'success': False,
'error': 'File not present'
}))
forms.py
class UploadFileForm(forms.Form):
""" This form represents a basic request from Fine Uploader.
The required fields will **always** be sent, the other fields are optional
based on your setup.
Edit this if you want to add custom parameters in the body of the POST
request.
"""
qqfile = forms.FileField()
qquuid = forms.CharField()
qqfilename = forms.CharField()
qqpartindex = forms.IntegerField(required=False)
qqchunksize = forms.IntegerField(required=False)
qqpartbyteoffset = forms.IntegerField(required=False)
qqtotalfilesize = forms.IntegerField(required=False)
qqtotalparts = forms.IntegerField(required=False)
推荐文章
- django MultiValueDictKeyError错误,我如何处理它
- 我如何在Django中创建一个鼻涕虫?
- 没有名为'django.core.urlresolvers'的模块
- Django - makemigrations -未检测到任何更改
- ">", "<", ">=" 和“< =”不工作”在Django过滤()”
- 从包含文件名的路径获取不包含文件名的完整路径
- Git:从另一个分支复制目录中的所有文件
- PHP,获取没有文件扩展名的文件名
- Django项目工作目录结构的最佳实践
- 如何在远程系统上使用Ansible任务移动/重命名文件
- 如何在Django中表达一对多关系?
- 用Django创建电子邮件模板
- 从java.io.File获取java.nio.file.Path对象
- 用c#编写数据到CSV文件
- 安卓系统;检查文件是否存在而不创建新的文件