8

私が作成する必要がある django サイト内でユーザーのデータを分離しておく方法/最良の、最も安全な方法をワークアウトしようとしています。

これが私がしなければならないことの例です...

サンプルアプリ ToDoList

django contrib.auth を使用してユーザー/パスワードなどを管理すると、次のユーザーが作成されます

トム・ジム・リー

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 のようになります。

しかし、どちらにしても、これが正しい方法/最善の方法であるかどうか、またはユーザーがお互いのデータを見るのを止めるという点でばかげているかどうかはわかりません

乾杯

リチャード

4

2 に答える 2

15

1 つの方法は、現在ログインしているユーザーで 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 レコードにアクセスできなくなります。それがあなたを助けることを願っています。

于 2012-05-14T12:21:57.260 に答える
1

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

ユーザーログイン後、特定のビューをチェックするたびに、ユーザーのログイン情報をセッションデータに保持する必要があります。

  1. その特定のユーザーがこのビューを表示する権利を持っているかどうかを確認してください。
  2. ユーザーのTodoリストを照会するときに、ユーザーのログイン情報(IDまたはユーザー名)を使用します。

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

セッション、ユーザー、および登録

于 2012-05-14T12:22:21.973 に答える