Вопрос

Я пытаюсь понять документацию Использование изображений Python API И я запутался о том, как получить ключ и отображать аватар.

Документация говорит, что Image обработчик будет служить образу от /img дорожка.

Я запутался о том, что это Image Обработчик делает. Я прокомментирую ниже, насколько это понять; пожалуйста исправьте. Спасибо:

class Image (webapp.RequestHandler):
    def get(self):
        #get the key of the image "img_id" from datastore
        #what is the value of "img_id"? Where does it come from?
        #how does the app engine know to get what key for which image?
        greeting = db.get(self.request.get("img_id"))
        #what is greeting.avatar?
        #is it img_id.avatar ?
        #I assume "avatar" refers to the "avatar" property in the model
        if greeting.avatar:
            self.response.headers['Content-Type'] = "image/png"
            #does this display the avatar?
            #I thought the img tag displayed the avatar
            self.response.out.write(greeting.avatar)
       else:
          self.error(404)

Большое спасибо за вашу помощь.


ОБНОВИТЬ (Re: Ответ от Gabi Purcaru)

Спасибо снова за явный ответ. У меня есть запрос, который отображает пользовательские комментарии, как это:

    for result in results:
        self.response.out.write("<li>")
        self.response.out.write("<b>%s</b> %s " % (result.userName, result.userLatestComment))
        self.response.out.write("</li>")
    self.response.out.write("</ol></body></html>")

Итак, я копирую строку с тегом изображения из Главный оговариватель

self.response.out.write("<div><img src='img?img_id=%s'></img>" % greeting.key())

и изменить

greeting.key()

к

result.key()

Я предполагаю, что теперь это должно отображать аватар рядом с пользователем комментариев:

    for result in results:
        self.response.out.write("<li>")
        self.response.out.write("<b>%s</b> %s " % (result.userName, result.userLatestComment))
        self.response.out.write("<div><img src='img?img_id=%s'></img>" % result.key())
        self.response.out.write("</li>")
    self.response.out.write("</ol></body></html>")

Но все еще не понятно почему result.key() Ключ изображения, который я хочу отобразить?

Это было полезно?

Решение

  1. "img_id" исходит из полученной части URL (что-то вроде «www.example.com/img?img_id = 12312."). Двигатель назначает новый уникальный ключ для каждой модели в базе данных.

  2. greeting.avatar является аватарным свойством модели с ключом img_id. Отказ Итак, в каком-то смысле вы можете думать об этом, как img_id.avatar, хотя технически это не правильно.

  3. Это не отображает аватар, он просто возвращает аватар. Давайте сделаем обычное изображение, например, для вас, чтобы лучше понять. Когда вы пишете <img src="some_link" />, браузер будет искать "some_link", и включите это изображение. Браузер затем прочитает изображение из файловой системы и вернет его в браузер. Что ваш обработчик делает изменение части бэкэнд, так что веб-сервер вернет изображение из хранилища данных (в частности, что avatar свойство) вместо обычного файла. Браузер - и пользователь - увидит его как обычный образ.

РЕДАКТИРОВАТЬ: result.key() Является ли уникальный идентификатор, который база данных автоматически дала вашу модель. Вам нужно «сказать» для обработчика изображений, который вы только что написали, чтобы узнать, какую конкретную модель аватара вам нужно. Вы делаете это, установив img_id Получить переменную для URL (которую вы только что сделали).

Я не уверен, что вы понимаете все .key() предмет. Позвольте мне объяснить, что:

Любая база данных должна идентифицировать одну запись из другой (модель в нашем случае). Вот почему они будут автоматически назначить новый и самое главное уникальный Идентификатор (ключ в нашем случае) каждому и каждую запись, вставленную в базу данных. Вам придется предоставить ключ модели для вашего обработчика, чтобы вернуть аватар этой модели.

Давайте возьмем пример реального мира: вы человек среди многих. Способ того, что ваша страна однозначно определяет, что вы какой-то SSN (номер социального страхования). В моей стране это 13-значный код (например, 1024582485008). Если я хочу получить мою водительскую лицензию, мне придется предоставить свое имя, но этого недостаточно - я не единственный Габи Пуркуру в моей стране. Я также придется предоставить мой SSN, который точно скажет ВОЗ Я. Если мы сделаем аналогию, вы должны предоставить модель «SSN» модели (т. Е. ключ) к обработчику, так что это будет знать который Модель, чтобы получить от базы данных и вернуть ее аватар.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top