Sil*_*ght 2 python django file-upload dry
我正在编写一个带图像上传的大型应用程序.
这是我的模型:
class GallryImage(models.Model):
# ...
image = models.ImageField(max_length=255, upload_to='gallery', height_field='width', width_field='height')
width = models.IntegerField()
height = models.IntegerField()
# ...
Run Code Online (Sandbox Code Playgroud)
以下是我处理上传的方式:
image_name = 'image.png';
destination = open(settings.MEDIA_ROOT + '/gallery/' + image_name, 'wb+')
for chunk in f.chunks():
destination.write(chunk)
destination.close()
Run Code Online (Sandbox Code Playgroud)
这段代码违反了DRY原则 - 路径gallery重复两次.
问题:如何重用我在model(upload_to='gallery')中指定的路径,以便我不必在上传处理程序中重复?
我正在使用python 2.6和Django 1.3 beta.
谢谢!
解决方案基于Paulo的答案
保存模型实例时,文件会自动上传,所以我只需要这样做:
def add(request):
from forms import ImageAddForm
form = ImageAddForm()
if request.method == 'POST':
form = ImageAddForm(request.POST, request.FILES)
if form.is_valid():
image = GalleryImage(
image = form.cleaned_data['image']
)
image.save() # file is uploaded to upload_to dir!
return HttpResponseRedirect(reverse('image_add') + '?image_added=')
else:
form = ImageAddForm()
return render_to_response('gallery/add.html',
locals(),
context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
该表格框架应该照顾这对你.除非您想将它们存储在文件系统以外的某个容器中,否则无需手动保存文件.
class UploadImageForm(forms.ModelForm):
class Meta:
model = GallryImage
...
# Sample view
def upload_file(request):
if request.method == 'POST':
form = UploadImageForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return HttpResponseRedirect('/success/url/')
else:
form = UploadImageForm()
return render_to_response('upload.html', {'form': form})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2768 次 |
| 最近记录: |