我想管理員用戶能夠附加與我的模型相關的私人任意文件共享點。由於Django主要用作發佈平臺,迄今爲止我發現的所有示例都將文件上載到靜態目錄,並在其中公開訪問。我如何允許管理員上傳與他們相關的模型具有相同權限的文件?Django私人文件上傳
1
A
回答
1
我認爲最強大的方式來做到這一點正在寫一custom file storage
這是沒有那麼困難(但可能是矯枉過正滿足您的需求)。然後,你可以自定義存儲綁定到你的模型是這樣的:
from django.db import models
from django.db.models.fields.files import FileField
from myapp.storage import MyCustomStorage
class MyModel(models.Model):
path = FileField(... , storage=MyCustomStorage(), blank=False)
然後,您可以在您的自定義存儲類的業務邏輯。這樣做,您可以將私人文件存儲在本地文件系統,數據庫或遠程系統(如Google AppEngine)中。
乾杯!
2
你可以做的是在你的web服務器中設置一個特定的位置,只分類爲內部的,在你的Django應用程序中的業務邏輯將發送一個帶有特定標題的重定向,這將允許你的web服務器提供文件靜態。我以前在Nginx上使用X-Accel-Redirect來做這件事,所以我打算使用它作爲我的例子,但是我相信Apache2和其他Web服務器(X-Sendfile,我想呢?)有相同的功能。 。
在你的Nginx配置,建立,供應在您上傳您的訪問被保護文件的目錄位置:
location /protected/ {
internal;
alias /var/www-priv/;
}
文件放在這個目錄將無法訪問外部的的URL /保護/ {filepath},但是如果您從頭文件X-Accel-Redirect =/protected/{filepath}返回Django應用程序的響應。
使用像/ media/{filepath}這樣的URL創建視圖,在該視圖中執行必要的業務邏輯以控制對其的訪問(您可能希望使路徑參數稍微更詳細,以便可以捕獲應用程序標籤,其中文件被附加訪問控制例如/媒體/ {app_label}/{模型}/{的object_id}/{文件名})
的目的模型和對象ID您然後只是做
response = HttpResponse()
response['X-Accel-Redirect'] = "/protected" + filepath
return response
和Bob的叔叔 - 用戶將被提供受保護的文件。
相關問題
- 1. 上傳私人文件?
- 2. 文件上傳到私人的位置在Django
- 3. Django + nginx提供私人靜態文件
- 4. Django文件上傳
- 5. django文件上傳
- 6. SVN私人文件
- 7. 私人上傳文件夾爲每個用戶與CKFINDER
- 8. 如何使文件上傳到s3私人
- 9. Rails - 將私人文件上傳到Google雲端存儲
- 10. 私人文件夾上的FileWatcher
- 11. 訪問s3上的私人文件
- 12. 私人二傳手
- 13. Django SuspiciousOperation在/上傳/上傳文件時
- 14. jquery - > django文件上傳
- 15. Django上傳文件權限
- 16. Django文件上傳進度
- 17. Django從json上傳文件
- 18. Django中的文件上傳
- 19. Django的PermissionError,上傳文件
- 20. Django-piston文件上傳
- 21. 在Django中上傳文件
- 22. 使用django上傳文件
- 23. 用django-profiles上傳文件
- 24. Django ajax文件上傳
- 25. Django上傳xls文件
- 26. Django ajax jquery文件上傳
- 27. GAE + Django,上傳大文件
- 28. django模型文件上傳
- 29. Django的文件上傳
- 30. Django ImageField:文件不上傳