Python django:将每个用户的数据分开

Python django:将每个用户的数据分开,python,django,Python,Django,我正在努力研究如何/以最好、最安全的方式在我需要编写的django站点中分离用户数据 这是我需要做的一个例子 示例应用程序ToDoList 使用django contrib.auth管理用户/密码等,我将拥有以下用户 汤姆 吉姆 背风 将会有一个ToDo模型(在我的real应用程序中会有其他模型) 我现在面临的问题——可能是想得太多了:这个问题怎么会被锁定,这样汤姆只能看到汤姆的待办事项列表,李只能看到他的待办事项列表等等 我看到一些帖子说,您可以在每个查询中使用过滤器,或者使用url,这样ur

我正在努力研究如何/以最好、最安全的方式在我需要编写的django站点中分离用户数据

这是我需要做的一个例子

示例应用程序ToDoList

使用django contrib.auth管理用户/密码等,我将拥有以下用户

汤姆 吉姆 背风

将会有一个ToDo模型(在我的real应用程序中会有其他模型)

我现在面临的问题——可能是想得太多了:这个问题怎么会被锁定,这样汤姆只能看到汤姆的待办事项列表,李只能看到他的待办事项列表等等

我看到一些帖子说,您可以在每个查询中使用过滤器,或者使用url,这样url看起来就像www.domain.com/username/todo

但无论哪种方式,我都不确定这是正确的方式/最好的方式,还是在阻止用户看到彼此数据方面的疯狂方式

干杯


Richard

一种方法是按当前登录的用户筛选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记录。希望这对您有所帮助。

创建类似www.domain.com/username/todo的url是实现它的一种方法,但它不能保证您实现安全性

在用户登录后,每次检查某个视图时,应将用户的登录信息保存在会话数据中

  • 检查特定用户是否有权查看此视图
  • 查询用户的待办事项列表时使用用户的登录信息(ID或用户名)
  • 我想这个链接会帮助你完成你的工作


    .

    无需显式使用会话信息。标准的django方法只是使用request.userWell进行过滤。我只是想给他们展示更基本的方式。做这项工作:)但是谢谢!仅供参考,request.user由会话框架设置。直接使用会话框架是很少见的。我从来没有使用过会话框架(尽管它确实有它的位置)。嗨,谢谢这个例子,这是感觉正确的方式,我将使用这个方法,刚刚编写了一个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})