Django 如果我想让数据只对一个用户可用,我应该从URL中删除用户id吗?
假设我们有以下url: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中处理该问题的任何其他想法?您可以使用请求填充上下文,以确保用户永远
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