我正在使用Django 1.9.7和Python 3.5制作网站。作为网站的一项功能,我想让用户通过在表单中添加网址并点击“保存”来将图片保存到页面中。然而,在添加它最终要去的图片之前,我想通知用户他输入的链接是否无效。所以点击" Save"通过AJAX触发此视图,该视图仅通知客户端URL是否最终可以接受。
不幸的是,虽然这种方法确实成功拒绝了它应该做的一切(即无效的网址和不指向图片的网址),但它也拒绝了它不应该做的一半(确实有效的网址确实存在)指向图片)。例如,https://pbs.twimg.com/profile_images/2326994241/dry2n3uwbuscxokvi13t_400x400.jpeg可以保存正常,但http://aei.org/wp-content/uploads/2013/08/img-andrewbiggs300x225_151146990889.jpg没有。我不确定区别是什么。
我所知道的,从印刷品陈述来看,当它破裂时,它似乎就会突破
pic = urllib.request.open(picurl)
有什么想法?这是完整的视图。感谢。
from django.core.files import File
from io import BytesIO
from django.shortcuts import render
import os, urllib.parse, urllib.request
def pic(request):
if request.method == 'POST':
form = PicForm(request.POST)
if form.is_valid():
picurl = urllib.parse.unquote(form.cleaned_data['picurl'])
try:
pic = urllib.request.urlopen(picurl)
if picurl.endswith('.jpg') or picurl.endswith('.jpeg') or picurl.endswith('.tif') or picurl.endswith('.tiff') or picurl.endswith('.gif') or picurl.endswith('.png') or picurl.endswith('.pdf'):
io = BytesIO(pic.read())
e = PicTest.objects.create(
title="Placeholder",
)
e.pic.save(
os.path.basename(picurl),
File(io)
)
e.save()
e.delete()
return render(request, 'topics/validpic.html', {'valid':"1"})
except:
return render(request, 'topics/validpic.html', {'valid':"0"})
else:
return render(request, 'topics/validpic.html', {'valid':"-1"})