2

django-nonrel を使用して Google App Engine でブログ サイトを構築しています。ブログ投稿などに画像を保存および表示する方法が必要です。

アイデアは、特定の記事などの画像をアップロードするアップロード アプリケーションを用意し、imd src に絶対または相対 URL を使用することです。

django-filetransfers を使用して画像をアップロードしています ( http://www.allbuttonspressed.com/projects/django-filetransfers )。

質問は次のとおりです。1) Google App Engine と django-nonrel を使用してブログをホストしている人はいますか? もしそうなら、どのように、どこに画像を保存していますか? この用途に GAE Blobstore を使用するのはやり過ぎですか? 2) 画像の URL には、flie-transfers アプリケーションで設定したダウンロード パスを使用しています。例えば。 これは正しいです?.png 拡張子などを使用して参照しないのは少し奇妙に思えます。しかし、これはブロブストアから画像を参照する方法でしょうか?

Django と Google App Engine を使ってまだロープを学んでいるので、助けていただければ幸いです。

ありがとう

4

1 に答える 1

1

できる、

私は、Django-nonrel で Blobstore を使用する際に同様の経験をしました。

最初の質問については、ブロブストアはやり過ぎではなく、プロジェクト全体を更新して再公開することなく画像をアップロードできる唯一の方法だと思います。サーバーの高度なレプリケーションとセキュリティのため、GAE ではディレクトリへの書き込みは許可されません。これは、需要の増加に応じてすべてのサーバーを自動的に起動できることとのトレードオフです。ディレクトリへの書き込みを伴う操作を行おうとすると、App Engine でエラーが発生します。

2番目の質問に対するより良い解決策を探しています。自分でファイルを名前で参照できるようにしたいと思います。私が考える重要な点は、保存時にファイル名に設定される「アップロード」モデルに追加の属性を追加することです。私はそれを試していませんが、うまくいくはずです。


アップデート:

これはうまくいきました。

モデルは次のとおりです。

class UploadModel(models.Model):
    title = models.CharField(max_length=64, blank=True)
    file = models.FileField(upload_to='uploads/%Y/%m/%d/%H/%M/%S/')
    filename = models.CharField(max_length=100, editable=False, null=True, blank=True)

    def save(self, *args, **kwargs):
        self.filename = self.file.name.rsplit('/', 1)[-1]
        super(UploadModel, self).save(*args, **kwargs)

ダウンロード ハンドラは次のとおりです。

def download_handler(request, filename):
    upload = get_object_or_404(UploadModel, filename=filename)
    return serve_file(request, upload.file, save_as=True)

URL マッピング:

url(r'^file/(?P<filename>.+)$', 'cms.views.download_handler_filename', name='cms-download_file'),

これを行うと、ファイル名でファイルにアクセスできます (これはサンプル アプリのスニペットにすぎません)。ご覧のとおり、「pk」は「filename」属性に置き換えられました。

{% url cms-download_file filename=upload.filename as fallback_url %}
<p><img src="{% firstof upload.file|public_download_url fallback_url %}"></p>

私が立ち往生しているのは、「public_download_url」をGAE Blobstoreで動作させることです。他の誰かが、パブリック URL を自動的に生成する適切なパブリックを機能させる方法についてコメントできる場合は、大いに感謝します。

許す

于 2012-01-17T01:40:29.117 に答える