2012-05-14 35 views
5

我努力鍛鍊,以保持用戶的數據是最好的,最安全的方式Django的網站,我需要寫內如何/分離。Django的:保持每個用戶數據分開

這裏是什麼,我需要做一個例子...

示例應用TodoList的

使用Django contrib.auth來管理用戶/密碼等,我有以下的用戶

湯姆 吉姆 李

將會有一個待辦事項模型(在我的真正的應用程序將有更多的車型)

class ToDo(models.Model): 
    user = models.ForeignKey(User) 
    description = models.CharField(max_length=20) 
    details = models.CharField(max_length=50) 
    created = models.DateTimeField('created on') 

,我遇到的問題 - 而且可在想這:這將如何被鎖定,因此,湯姆只能看到湯姆的待辦事項清單,李某隻能看到他待辦事項列表等等...

我已經看到幾個帖子,指出你可以在每個查詢中使用過濾器,或者使用url,所以url可能看起來像www.domain.com/username/todo

但是無論哪種方式,我不知道這是否正確的方式/最好的方式,或者在阻止用戶看到對方數據方面的麻煩

歡呼聲

理查德

回答

8

的一種方法是通過過濾待辦事項當前登錄的用戶:

from django.contrib.auth.decorators import login_required 
from django.shortcuts import render 

from your_app.models import ToDo 

@login_required 
def todos_for_user(request): 
    todos = ToDo.objects.filter(user=request.user) 
    return render(request, 'todos/index.html', {'todos' : todos}) 

這鎖定向下通過登錄的用戶從請求僅用於認證的用戶的觀點,和過濾,即使已登錄,另一個用戶也無法訪問其他用戶的ToDo記錄。希望能幫助你。像www.domain.com/username/todo

+0

您好,感謝的例子,那就是感覺對了,我會用這種方法走的路,剛寫了一個待辦事項應用例子,這個效果很好。 – Richard

+0

太棒了。很高興我能夠提供幫助。 – Brandon

1

充分利用了URL是實現它的一種方式,但它並不能保證你實現安全性。

你應該做的保持用戶登錄後的會話數據的用戶的登錄信息,以及每次檢查某些觀點,即特定用戶

  1. 檢查是否有權利看這種觀點。
  2. 查詢用戶的待辦事項列表時,使用用戶的登錄信息(ID或用戶名)。

我猜這個鏈接會幫你做你的工作。

Sessions, Users, and Registration

+0

不需要明確使用會話信息。標準的Django的方式只是過濾request.user –

+0

那麼。我只是想展示他們更基本的方式。做這份工作:) 但是,謝謝! –

+0

僅供參考,request.user由會話框架設置。不得不直接使用會話框架。我從來沒有必要使用會話框架(儘管它確實有位置)。 –

相關問題