首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django:如何从我的模型字段中获取值,并使用它来搜索在线图像,然后将图像url存储在模型中?

问Django:如何从我的模型字段中获取值,并使用它来搜索在线图像,然后将图像url存储在模型中?
EN

Stack Overflow用户
提问于 2018-04-01 09:09:18
回答 1查看 110关注 0票数 0

使用Python3,我有一个带有动画应用程序的Django项目。这款动漫应用的模型如下:

代码语言:javascript
复制
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或表单输入),并在谷歌搜索中使用它,并获得搜索的第一张图像。我有这个代码可以帮助我做到这一点。

代码语言:javascript
复制
    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的值,就像它在模板中一样。

EN

回答 1

Stack Overflow用户

发布于 2018-04-01 19:28:07

使用下面的功能将url保存到图像字段中

代码语言:javascript
复制
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来处理此功能。

代码语言:javascript
复制
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())
# .............
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49593895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档