2012-05-14 6 views
5

私は書く必要があるdjangoサイト内で、ユーザーのデータを分離して保存するためのベストな、最も安全な方法を試しています。ここで django:各ユーザーのデータを別々に保つ

は、ユーザー/パスワードを管理するジャンゴcontrib.authを使用し

たとえばアプリのtodolistの

など、私は次のユーザーになります...私は何をする必要があるかの一例である

ジム・リー

ToDoのモデル(私の本当のアプリに追加モデルが存在します)

がありますトム
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') 

私が午前問題 - と比べてこの思考することができる。これはロックダウンされますどのようにのみトムのToDoリストを見ることができトム、唯一の彼のToDoリストを見ることができます風下のように...

私はあなたがすべてのクエリでフィルタを使用することができる、またはURLを使用することができると述べているいくつかの投稿を見てきたので、URLはwww.domain.com/username/todoのように見えるかもしれません

しかしどちらか私はこれが正しい方法/最良の方法、または他人のデータを見ることを止めるという面での相談者

歓声

リチャード

答えて

8

一つのアプローチは、現在ログインしているユーザーによってToDoの項目をフィルタリングすることである。

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レコードにアクセスすることはできません。それがあなたを助けることを願っています。

+0

こんにちは、これは正しい方法ですが、私はこの方法で行って、ちょうどa todoアプリケーションの例を書いただけです。これはうまくいきます。 – Richard

+0

私は喜んで助けてくれました。 – Brandon

1

www.domain.com/username/todoのようなURLを実装する1つの方法ですが、セキュリティを保証するものではありません。

あなたは、ユーザーのログイン後にセッションデータにユーザーのログイン情報を保持しないはずです、そしてあなたは、特定のビューを確認するたびに、その特定のユーザーが、このビューを表示する権利を有するかどうかを

  1. チェック。
  2. ユーザーのTodoリストを照会するときにユーザーのログイン情報(IDまたはユーザー名)を使用します。

そして私はこのリンクがあなたの仕事をするのに役立つと思います。

Sessions, Users, and Registration

+0

セッション情報を明示的に使用する必要はありません。標準のジャンゴ方法は単にrequest.userでフィルタリングすることです –

+0

。私はもっ​​と基本的な方法を提示したいと思っています。仕事をする:) しかし、ありがとう! –

+0

ちょうどFYI、request.userはセッションフレームワークによって設定されています。セッションフレームワークを直接使用する必要は珍しいことです。私はかつてセッションフレームワークを使用していたことはありませんでした(ただし、その場所はあります)。 –

関連する問題