2010-07-20 94 views
0

我想設置一個Django服務器,允許某些用戶訪問某些媒體。我相信這不會那麼難,我只是有點傻。用戶權限Django服務媒體

比如我想USER1能夠訪問JPEG1,JPEG2和JPEG3但不JPEG4,和user2能夠訪問JPEG3和JPEG 4

[我知道我應該用火焚燒使用Django爲媒體提供服務,但這正是我目前正在做的事情,當我開始真正開始使用天然氣時,我會改變它。]

回答

2

您可以使用django發送文件,方法是返回請求中的文件,如Vazquez-Abrams鏈接所示。

但是,由於效率的原因,您可能會在apache(或lighttpd中的類似設置)中使用mod_xsendfile來實現最佳效果。 Django並沒有像發送它那麼快,在保持使用dev服務器的靜態功能的選項的同時,一種方法是http://pypi.python.org/pypi/django-xsendfile/1.0

至於什麼用戶應該能夠訪問什麼jpeg,你可能必須實現這個你自己。一個簡單的方法是創建一個帶有多對多字段的Image模型給有訪問權的用戶和一個函數來檢查當前用戶是否在這些用戶中。沿線的東西:

if image.users_with_access.filter(pk=request.user.id).exists(): 
    return HttpResponse(image.get_file()) 

當然有很多其他的代碼,只是作爲一個例子。我實際上在我自己的項目中使用了一個修改過的mod_xsend來達到這個目的。

+0

謝謝你。這是我想知道的兩個部分,即使我對描述它不是很清楚。 對不起,我不能upvote答案更多。 – user397080 2010-07-22 09:16:35

0

你可以把媒體http://foo.com/media/blah.jpg併成立了urls.py一個media/(?P<file>.*)指向檢查用戶和內部的權限視圖blahview

from you_shouldve_made_one_anyways import handler404 
def blahview(request,*args,**kwargs): 
    if cannot_use(request.user, kwargs['username']): return handler404(request) 
    ... 

雖然僅僅是明確的,我做推薦通過Django服務媒體。

+0

我超級,雙重諾言,當它開始變得重要時,不會通過Django爲媒體提供服務。 謝謝你,你的例子使它更清晰一些。 – user397080 2010-07-22 09:21:32