Django 如果我想让数据只对一个用户可用,我应该从URL中删除用户id吗?

Django 如果我想让数据只对一个用户可用,我应该从URL中删除用户id吗?,django,django-templates,Django,Django Templates,假设我们有以下url: example.com/users/1 如果ID为1的用户打开它,用户将收到有关其帐户的信息,但如果用户将1与2切换,则他也可以查看其他用户详细信息,我们当然不希望这样,因此我有以下解决方案: 1) 只需在模板中传递当前登录的用户id抛出的request.user.id 2) 添加权限,但我没有找到允许我这样做的权限类型。当然,我可以为每个用户创建几十个权限,但这当然是非常讨厌的方式 如何在Django中处理该问题的任何其他想法?您可以使用请求填充上下文,以确保用户永远

假设我们有以下url:

example.com/users/1
如果ID为1的用户打开它,用户将收到有关其帐户的信息,但如果用户将1与2切换,则他也可以查看其他用户详细信息,我们当然不希望这样,因此我有以下解决方案:

1) 只需在模板中传递当前登录的用户id抛出的request.user.id

2) 添加权限,但我没有找到允许我这样做的权限类型。当然,我可以为每个用户创建几十个权限,但这当然是非常讨厌的方式


如何在Django中处理该问题的任何其他想法?

您可以使用请求填充上下文,以确保用户永远不会看到其他用户的数据,例如(使用CBV):

另一种确保“假”URL呈现404的方法是编写所有者所需的装饰程序,例如:

def owner_required(function):
    @wraps(function)
    def decorator(*args, **kwargs):
        request = args[1]
        user = get_object_or_404(User, username=request.user.username)
        if user.is_authenticated() and user.username == kwargs.get('slug'):
            return function(*args, **kwargs)
        raise Http404
    return decorator

这样做不需要许可。 在您的视图中.py

from django.http import Http404

def myview(request, user_id):

  user = request.user
  if user_id != request.user.id:
      raise Http404

  #all your logic here
但如果您希望用户配置文件是私有的,则不需要在url模式中使用用户id。只需使用存储在请求变量中的用户对象

from django.http import Http404

def myview(request, user_id):

  user = request.user
  if user_id != request.user.id:
      raise Http404

  #all your logic here