使用Python3,我有一个带有动画应用程序的Django项目。这款动漫应用的模型如下:
class Anime(models.Model):
id = UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = CharField(max_length=100, blank=False)
genre = CharField(max_length=1000, blank=False)
TV = "TV/Series"
MOVIE = "Movie"
SPECIAL = "Special"
OVA = "OVA"
UNKNOWN = "Unknown"
MUSIC = "Music"
ONA = "ONA"
typeChoices = (
(TV, "TV/Series"),
(MOVIE, "Movie"),
(SPECIAL, "Special"),
(OVA, "OVA"),
(ONA, "ONA"),
(MUSIC, "Music"),
(UNKNOWN, "Unknown")
)
animeType = CharField(max_length=10, choices=typeChoices, default=TV, blank="False")
episodes = IntegerField()
rating = FloatField()
members = IntegerField()
photoCover = ImageField(null=True, upload_to="img/covers", verbose_name="cover photo", blank=True)我想获取动漫的名称(数据由csv或表单输入),并在谷歌搜索中使用它,并获得搜索的第一张图像。我有这个代码可以帮助我做到这一点。
import urllib
from bs4 import BeautifulSoup
searchName = searchName.replace(" ", "%20")
searchName = searchName.replace("-", "%2D")
searchName = searchName.replace("&", "%26")
html = urllib.urlopen("http://www.google.com/search?q="+searchName+"&tbm=isch")
soup = BeautifulSoup(html)
img_links = soup.findAll("img", {"class":"rg_ic"})
for img_link in img_links:
print(img_link.img['src'])我不知道的是,这是否有效,是否有效,我不知道在哪里应用代码。我希望使用img_link.img['src']作为Anime.photoCover.url的值,就像它在模板中一样。
发布于 2018-04-01 19:28:07
使用下面的功能将url保存到图像字段中
import urllib
import os
from django.core.files import File
from . models import Anime
def create_anime_from_url(name, genre, animeType, episodes, rating, members, url):
obj = Anime.objects.create(
name=name, genre=genre, animeType=animeType,
episodes=episodes, rating=rating, members=members
)
photoCover = urllib.request.urlretrieve(url)
obj.photoCover.save(
os.path.basename(url),
# File(open(photoCover[0]))
' '
)如果您不想将图像url存储到文件系统中,那么您必须使用CustomFileSystemStorage来处理此功能。
class CustomFileSystemStorage(FileSystemStorage):
def _save(self, name, content):
if name.startswith('https://') or name.startswith('http://'):
return name
return super(CustomFileSystemStorage, self)._save(name, content)
def url(self, name):
if name.startswith('https://') or name.startswith('http://'):
return name
return super(CustomFileSystemStorage, self).url(name)
class Anime(models.Model):
# .............
photoCover = ImageField(
null=True, upload_to="img/covers",
verbose_name="cover photo", blank=True,
storage=CustomFileSystemStorage())
# .............https://stackoverflow.com/questions/49593895
复制相似问题