2

Images 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)

助けてくれて本当にありがとうございます。


更新(再: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>")

そのため、MainPageハンドラーから画像タグのある行をコピーします

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()しかし、なぜ私が表示したい画像のキーなのかはっきりしていませんか?

4

1 に答える 1

3
  1. "img_id"URLのGET部分(「www.example.com/img?img_id = 12312」のようなもの)から取得されます。エンジンは、データベース内のすべてのモデルに新しい一意のキーを割り当てます。

  2. greeting.avatarキーを持つモデルのアバタープロパティですimg_idimg_id.avatarしたがって、技術的には正しくありませんが、ある意味では、のように考えることができます。

  3. アバターは表示されません。アバターを返すだけです。理解を深めるために、たとえば通常の画像を見てみましょう。を書くと、ブラウザはその画像<img src="some_link" />を探して含めます。"some_link"次に、ブラウザはファイルシステムから画像を読み取り、ブラウザに返します。ハンドラーが行うことは、バックエンド部分を変更することです。これにより、Webサーバーはavatar、通常のファイルではなく、データストア(具体的にはそのプロパティ)から画像を返します。ブラウザ(およびユーザー)は、それを通常の画像として表示します。

編集: result.key()データベースが自動的にモデルに与えた一意の識別子です。必要な特定のモデルのアバターを知るために、今書いた画像ハンドラーに「伝える」必要があります。img_idこれを行うには、URLにGET変数を設定します(これは先ほど行いました)。

あなたがすべてを理解しているかどうかはわかりません.key()。それを説明させてください:

すべてのデータベースは、あるレコードを別のレコード(この場合はモデル)から識別する必要があります。これが、データベースに挿入されたすべてのレコードに、新しい、最も重要な一意の識別子(この場合はキー)を自動的に割り当てる理由です。そのモデルのアバターを返すには、ハンドラーにモデルのキーを提供する必要があります。

実際の例を見てみましょう。あなたは多くの人々の中の個人です。あなたの国があなたを一意に識別する方法は、ある種のSSN(社会保障番号)によるものです。私の国では、13桁のコードです(例1024582485008)。運転免許証を取得したい場合は、名前を入力する必要がありますが、それだけでは不十分です。私の国でガビプルカルは私だけではありません。また、SSNを提供する必要があります。これにより、自分が誰であるかが正確わかります。例えれば、モデルの「SSN」(つまりキー)をハンドラーに提供する必要があります。これにより、ハンドラーはデータベースから取得するモデルを認識し、アバターを返すことができます

于 2010-12-03T22:02:27.577 に答える