質問: models.CharField() ``` でして、文字列としてfile_path に result.kmz(ダウンロードするファイル)の絶対パスを保持しています(ファイルそのものではありません) HTMLに直接 ``` ダウンロード ``` ではNG(not allowed to load local resource)でした。 そこで、ダウンロード用のViewクラスを作成しようとしていますが、どのようにしていいかよく分かりませんでした。 よろしくお願いします。
回答: URL の問題についてはいったん(問題の原因がはおわかりになったという意味で)解決されたようですので、コメント欄でいただいたこちら ↓ のご質問に回答させていただきますね。 > > 作成したユーザーのみがDLできるようにするのは、どのようなやり方になるのでしょうか? > > > さまざまな方法があるかと思いますが、定石的な方法の大枠は次のとおりになると思います。 * a) ダウンロードさせたいファイルはユーザが直接アクセスできないところに置く(つまり Django の media ディレクトリは使わない) * b) ファイルダウンロードのための view を作成し、そこでアクセスのチェックを行ってからファイルを返す * c) ファイルダウンロードのリンクの `href` には b) の view の URL を入れる b) の view の処理の大まかな流れは次のとおりです。 1. ユーザがログインしているかをチェック → していなかったら 404 (あるいはその他のレスポンス) 2. ユーザが対象ファイルへのアクセス権限を持っているかをチェック → ダメなら 404 3. 1 と 2 の両方がパスしたら対象ファイルを開いてレスポンスで返す 3 はファイルサイズがメモリ的に許容できるなら `django.http.HttpResponse` を、そうでない場合は `django.http.StreamingHttpResponse` を使う、という形がよいのではないかと思います。 * Request and response objects | Django documentation | Django 以下 3 についての参考ページです。 * python - Serving large files ( with high loads ) in Django - Stack Overflow * Outputting CSV with Django | Django documentation | Django 尚、 2 を適切に行うためには、 `Mymodel` に `User` model への参照フィールドを追加して、ファイル生成時に対象ユーザとのひもづけを行っておく、といったことが必要になるかと思います。 あくまでも考え方の一例に過ぎませんが、ご参考になればと思います。がんばってください :)