Python 3中的urllib.request.urlopen问题

时间:2016-08-02 17:05:24

标签: django python-3.x django-views python-3.5 django-1.9

我正在使用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"})

0 个答案:

没有答案