Google Picasaをホスティングとして使用するDjangoフォトギャラリー





こんにちはHabraludi。



この投稿では、 Google Picasaを写真リポジトリとして使用して、私のサイトで写真ギャラリーを整理した経験を共有したいと思います。 phpの同様のソリューションはすでにHabréにありました。Djangoの実装もここにあります。 このトピックに興味のある方、歓迎します。







しばらく前、私は自分のウェブサイトでフォトギャラリーを整理するためのエンジンの選択について心配しました。 要件は非常に簡単でした。写真をアルバムに整理し、ギャラリー全体をアルバムのサムネイルとして表示するだけでなく、アルバムの写真も表示します。



さらに読みたくない人のために、すぐに完成した結果



はじめに



Djangoには既製のギャラリーソリューションがたくさんあります 。たとえば、 ここで一見の価値があります。 同時に、写真、サムネイル、作成されたキャッシュがサーバーに保存されます。提案された方法では、すべてのブラックワークにGoogleサーバーを使用するため、負荷が軽減され、スペースが節約されます。 ロードやその他のテストを実行しなかったことをすぐに予約します。これにより、パフォーマンスの向上などの根拠のない言葉を求められるようになります。



Google Picasaは、他の多くのGoogle製品と同様に、独自のAPIを備えています。詳細については、 ドキュメントをご覧ください。

必要なもの:





アプリケーションの説明



picasagalleryアプリケーションの説明に移りましょう。 アプリケーションは、2つのビューとそれらのテンプレートに基づいています。

まず、アルバムのリストとアルバムの写真をそれぞれ返す2つの関数を定義します。



from gdata.photos.service import PhotosService def get_albums(): pws = PhotosService() uf = pws.GetUserFeed(user = settings.PICASAGALLERY_USER) feed = '{uri}&thumbsize={thumbsize}'.format( uri = uf.GetAlbumsUri(), thumbsize = ALBUM_THUMBSIZE ) print feed return pws.GetFeed(feed).entry def get_photos(album): feed = '{uri}&imgmax={imgmax}&thumbsize={thumbsize}'.format( uri = album.GetPhotosUri(), imgmax = PHOTO_IMGMAXSIZE, thumbsize = PHOTO_THUMBSIZE ) return PhotosService().GetFeed(feed).entry
      
      







ここでは(将来的にも)すべてが非常に単純です。 おそらく、リクエストに渡されたパラメーターについてコメントする価値があります。



便宜上、これらのパラメーターをsettings.pyに入れます。

 # Picasagallery settings PICASAGALLERY_USER = 'your_email' PICASAGALLERY_PHOTO_THUMBSIZE = '128' PICASAGALLERY_PHOTO_IMGMAXSIZE = '1024' PICASAGALLERY_ALBUM_THUMBSIZE = '160c'
      
      







djangoシェルを使用して、この経済を試すことができます。



 >>> from picasagallery.utils import get_albums, get_photos >>> my_first_album = get_albums()[0] >>> print my_first_album.title.text #   >>> print my_first_album.media.thumbnail[0].url # url    https://lh3.googleusercontent.com/-aWPQC60j9zQ/TwCXlTD6CtE/AAAAAAAAAJk/E90Hu9OPiyg/s160-c/FotoLife.jpg >>> my_first_photo = get_photos(my_first_album)[0] >>> print my_first_photo.media.thumbnail[0].url # url     https://lh3.googleusercontent.com/-3Hb7VwUTBNg/TwCXlXqdAQI/AAAAAAAAAH8/v8ecBJtjV6k/s128/261799.jpg >>> print my_first_photo.content.src # url   ,      imgmax
      
      







my_first_album.media.thumbnailリストには写真のサムネイルが含まれており、そのサイズはthumbsizeパラメーターのコンマ区切り値の数に等しくなります。



アルバムのサムネイルはメイン写真のサムネイルです。デフォルトでは、アルバムに最初にアップロードされる写真ですが、これはGoogle Picasaウェブサイトのアルバム設定で変更できます。 APIを介してメインの写真を変更する機能は見つかりませんでした。誰かが知っているなら、コメントで教えてください。



視聴回数





ギャラリーページとアルバムページにそれぞれ2つの表現を定義します。



 from django.shortcuts import render from django.http import Http404 from picasagallery.utils import get_albums, get_photos def gallery(request): albums = get_albums() return render(request, 'picasagallery/gallery.html', {'albums': albums}) def album_list(request, album_id): for album in get_albums(): if album.gphoto_id.text == album_id: photos = get_photos(album) return render(request, 'picasagallery/album.html', {'photos': photos}) raise Http404()
      
      







パターン



ギャラリーテンプレート:

 {% extends 'base.html' %} {% load extras %} {% load i18n %} {% block head %} <link rel="stylesheet" href="{{ STATIC_URL }}picasagallery/css/base.css" type="text/css" media="screen" charset="utf-8" /> {% endblock %} {% block content %} {% for album in albums %} <div class='album'> <div class='album-head'> <a href="{% url picasagallery.views.album_list album.GetAlbumId %}" > <img class="album-preview" src="{% thumbnail_url album %}"> </a> </div> <div class="album-name"> <a href="{% url picasagallery.views.album_list album.GetAlbumId %}">{{ album.title.text }}</a> </div> </div> {% endfor %} <p> <a href="/media/picasa_gdata.zip">{% trans 'Download source' %}</a> </p> {% endblock %}
      
      







アルバムのテンプレート:

 {% extends 'base.html' %} {% load extras %} {% load i18n %} {% block head %} {% include 'picasagallery/pphoto.html' %} <link rel="stylesheet" href="{{ STATIC_URL }}picasagallery/css/base.css" type="text/css" media="screen" charset="utf-8" /> {% endblock %} {% block content %} <a href='{% url picasagallery.views.gallery %}' >{% trans "Back to gallery" %}</a> <p>{% trans "Album:" %} {{ album.title.text }}</p> <div class='gallery'> {% for photo in photos %} <div class='image-preview-div'> <a class='image-preview-link' style='{% thumbnail_style photo %}' rel='gallery-image[pp_gal]' href='{{ photo.content.src }}'> <img class='image-preview-img' style='{% thumbnail_style photo %}' src='{% thumbnail_url photo %}'> </a> </div> {% endfor %} <p> <a href='{{ album.GetHtmlLink.href }}' target='_blank'>{% trans "Show in Google Picasa" %}</a> </p> </div> {% endblock %}
      
      







アルバムと写真のサムネイルの URLを取得するには、これらのテンプレートはthumbnail_urlタグを使用します。これはリストの最初のサムネイルのURLを返します。 また、 「width:48;」という形式文字列を返すthumbnail_styleタグも使用されます。 高さ:48; ' の引数として使用するため
 <img ... />
      
      





これらのタグは、templatetagsフォルダーのextras.pyファイルで定義します。



 from django.template import Library register = Library() def get_thumbnail(obj): return obj.media.thumbnail[0] @register.simple_tag def thumbnail_url(obj): return get_thumbnail(obj).url @register.simple_tag def thumbnail_style(obj): thumb = get_thumbnail(obj) return 'width: %spx; height: %spx;' % (thumb.width, thumb.height)
      
      







アルバムのテンプレートには、prettyPhotoを接続するためのコードが含まれています。

 {% include 'picasagallery/pphoto.html' %}
      
      





この点については詳しく説明しません。興味のある人は誰でもソースを調べることができます。



さて、結論として、それが何をもたらしたのか 、そしてここでも同じことです



ご清聴ありがとうございました。



All Articles