我想使用互联网上的图片链接制作图片上传器(例如:wwww.google.com/image.jpg
)。用户编写上一个URL,然后我的模型上传它。
这是我的代码:
形式
<input id="id_name" type="text" name="name" maxlength="255" value="www.example.com/main.jpg" />
view.py
def Post_date():
if request.method == 'POST':
form = Addamazon()
image_url = request.POST.get('image')
file = urllib.urlopen(image_url)
im = cStringIO.StringIO(file.read()) # constructs a StringIO holding the image
img = Image.open(im)
save = '/tmp/' + str(int(time.time())) + '.gif'
img.save(save)
form.image=save
if form.is_valid():
pic = form.save(commit=False)
pic.save()
models.py
class Pic(models.Model):
image = ImageWithThumbsField(upload_to='images', sizes=((128, 128),))
图片上传但if form.is_valid():
不起作用,我不知道如何将其添加到表单数据中。
我如何将下载的图像分配给我的表单(form.image = save)?
答案 0 :(得分:0)
您从用户输入中获得了什么?是图像文件还是图像URL?
如果是图片网址,请将该字段设为form.URLField并执行帖子并像现在一样保存。
如果是图像文件,则不要从POST请求中提取图像文件。取出文件后,(通过read()
)form.is_valid
失败,因为该字段不存在。只需执行form.save()
并使用正确的名称上传到正确的文件夹,就可以了解。
答案 1 :(得分:0)
不要将二进制图像分配回form.image。而是在模型上添加一个单独的字段来存储图像的内容,例如FileField或ImageField,然后在检查是否可以执行form.is_valid()之后:
def Post_date():
if request.method == 'POST':
form = Addamazon()
image_url = request.POST.get('image')
file = urllib.urlopen(image_url)
data = cStringIO.StringIO(file.read())
name = str(int(time.time())) + '.gif'
if form.is_valid():
pic = form.save(commit=False)
pic.image.save(name, data)
pic.save()