{"id":13415947,"url":"https://github.com/cobusc/django-protected-media","last_synced_at":"2025-03-14T23:31:12.000Z","repository":{"id":43673202,"uuid":"90966498","full_name":"cobusc/django-protected-media","owner":"cobusc","description":"Separate handling of protected media in Django, with X-Sendfile support","archived":false,"fork":false,"pushed_at":"2023-08-03T11:11:03.000Z","size":41,"stargazers_count":69,"open_issues_count":1,"forks_count":13,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-03-14T20:56:40.460Z","etag":null,"topics":["django","nginx","python"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cobusc.png","metadata":{"files":{"readme":"README.ja.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2017-05-11T10:18:27.000Z","updated_at":"2025-02-27T02:37:47.000Z","dependencies_parsed_at":"2024-01-11T19:15:39.267Z","dependency_job_id":"c1f0967f-4b7e-42f5-9472-11fac2c7f861","html_url":"https://github.com/cobusc/django-protected-media","commit_stats":{"total_commits":38,"total_committers":5,"mean_commits":7.6,"dds":0.1842105263157895,"last_synced_commit":"606a7c20fbb57f0f9f01d393abf60e2cf3035583"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cobusc%2Fdjango-protected-media","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cobusc%2Fdjango-protected-media/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cobusc%2Fdjango-protected-media/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cobusc%2Fdjango-protected-media/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cobusc","download_url":"https://codeload.github.com/cobusc/django-protected-media/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243646616,"owners_count":20324585,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["django","nginx","python"],"created_at":"2024-07-30T21:00:53.231Z","updated_at":"2025-03-14T23:31:11.581Z","avatar_url":"https://github.com/cobusc.png","language":"Python","funding_links":[],"categories":["Third-Party Packages"],"sub_categories":["Security"],"readme":"[![Build Status](https://app.travis-ci.com/cobusc/django-protected-media.svg?branch=master)](https://app.travis-ci.com/cobusc/django-protected-media)\n\n\nDjango Protected Media\n======================\n\nDjango Protected Mediaは、機密性の高いメディアを保護された方法で管理するDjangoアプリです。\n\nメディアは別のファイルシステムの場所に保存されるだけでなく、\nアクセスするには認証を要求されるようになります。\n\nこのアプリケーションではDjangoが認証を行い、Nginxのようなウェブサーバがファイルを提供するようなセットアップが可能です。\n\nQuick start\n-----------\n\n1. 次のように `pip` でパッケージをインストールするします:\n```bash\npip install django-protected-media\n```\n\n2. 次のように INSTALLED_APPS の設定に \"protected_media\" を追加します:\n```python\nINSTALLED_APPS = [\n    ...\n    'protected_media.apps.ProtectedMediaConfig',\n]\n```\n\n3. プロジェクトの `urls.py` に次のように URLconf をインクルードします:\n```\npath('protected/', include('protected_media.urls')),\n```\n\n4. デフォルトの設定を調整する必要がある場合は、`settings.py` に以下の設定を追加します:\n```python\nPROTECTED_MEDIA_ROOT = \"%s/protected/\" % BASE_DIR\nPROTECTED_MEDIA_URL = \"/protected\"\nPROTECTED_MEDIA_SERVER = \"nginx\"  # デフォルトは \"django\" です\nPROTECTED_MEDIA_LOCATION_PREFIX = \"/internal\"  # nginxの設定で使用されるプレフィックス\nPROTECTED_MEDIA_AS_DOWNLOADS = False  # Content-Dispositionヘッダーを含めるか\n```\n\n5. モデルで新しいフィールドクラスを使用します:\n```python\nfrom protected_media.models import ProtectedImageField, ProtectedFileField\n\ndef SomeModel(models.Model):\n    document = ProtectedFileField(upload_to=\"uploads/\")\n    picture = ProtectedImageField(upload_to=\"uploads/\")\n    # ファイルは PROTECTED_MEDIA_ROOT + upload_to 以下に保存されます\n```\n\n概要\n--------\n\nDjango は以下の定義に基づいてメディアを管理します:\n```python\nBASE_DIR = \"/some/application/dir/\"\nMEDIA_ROOT = \"%s/media/\" % BASE_DIR\nMEDIA_URL = \"/media/\"\n```\n\nファイルフィールドと画像フィールドは、通常次のように定義されます:\n```python\ndocument = models.FileField(upload_to=\"uploads/\")\npicture = models.ImageField(upload_to=\"uploads/\")\n# ファイルは PROTECTED_MEDIA_ROOT + upload_to 以下に保存されます\n```\n\n典型的な本番環境では、`nginx`（または他のサーバー）にメディアを提供させます:\n```\n# Publicly accessible media\nlocation ^~ /media/ {\n    alias /some/application/dir/media\n}\n```\n\nこれは、メディアが一般にアクセス可能である場合にはうまく機能します。しかし、もしメディアが保護されるべきなら、 Django がメディアへのリクエストをログインした (あるいはもっと厳しい基準の) ユーザだけに許可すべきかどうかをチェックする方法が必要です。\n\n`protected_media` アプリケーション\n--------------------------------\n`protected_media` アプリケーションは以下のように構成されます\n* 新しい `settings.py` 属性の追加\n* カスタマイズされたFileSystemStorageクラス,\n* 保護されたメディアURLのカスタムハンドラ\n* `nginx`やそれに類するものでサービスを提供する場合は、ウェブサーバの追加設定を行う。\n\n保護されたメディアは、一般にアクセス可能なメディアとは異なる物理的な場所に保存されます。以下の設定は `settings.py` で指定できます:\n```python\nPROTECTED_MEDIA_ROOT = \"/some/application/dir/protected/\"\nPROTECTED_MEDIA_URL = \"/protected\"\nPROTECTED_MEDIA_SERVER = \"nginx\"  # デフォルトは \"django\"\nPROTECTED_MEDIA_LOCATION_PREFIX = \"/internal\"  # nginxの設定で使用されるプレフィックス\n```\n\n保護が必要なファイルや画像フィールドを定義する場合、`protected_media` アプリケーションが提供するクラスのいずれかを使用します:\n* `ProtectedFileField`\n* `ProtectedImageField`\n\n保護されたファイルフィールドと画像フィールドは、通常次のように定義されます:\n```python\ndocument = ProtectedFileField(upload_to=\"uploads/\")\npicture = ProtectedImageField(upload_to=\"uploads/\")\n# ファイルは PROTECTED_MEDIA_ROOT + upload_to 以下に保存されます\n```\n\nこれらのクラスはカスタム・ストレージのバックエンド `ProtectedFileSystemStorage` を持ち、保護されたメディアに関連するファイルシステムの場所とURLを管理します\n\n`nginx`を使用する場合は、次のように設定を更新する必要があります:\n```\n# Publicly accessible media\nlocation /media  {\n    alias /some/application/dir/media;\n}\n\n# Protected media\nlocation /internal  {\n    internal;\n    alias /some/application/dir/protected;\n}\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcobusc%2Fdjango-protected-media","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcobusc%2Fdjango-protected-media","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcobusc%2Fdjango-protected-media/lists"}