Django权限问题:登录用户仅查看自身保存信息的实现求助
解决Django用户只能查看自身Locker数据的问题
问题根源
你当前的视图使用Locker.objects.all()会查询所有用户的Locker记录,所以登录用户会看到其他人的数据。
解决方案
1. 修改视图过滤当前用户的数据
在user_locker视图里,把查询语句改成过滤当前登录用户的记录,同时加上登录验证,确保只有登录用户能访问这个页面:
# 先导入login_required装饰器 from django.contrib.auth.decorators import login_required @login_required def user_locker(request): # 过滤出当前登录用户的Locker记录 saved_info = Locker.objects.filter(user=request.user) all_saved_info = {'saved_info': saved_info} return render(request, 'pwdbank/user_locker.html', all_saved_info)
2. 优化模型(可选但推荐)
你的Locker模型里user字段设置了null=True,这意味着可以创建不关联任何用户的Locker记录,不符合你的需求。建议去掉这个参数,确保每个Locker都必须属于一个用户:
class Locker(models.Model): # 去掉null=True,确保每条记录都关联用户 user = models.ForeignKey(User, on_delete=models.CASCADE) site_name = models.CharField(max_length=55) site_url = models.URLField(max_length=55) username = models.CharField(max_length=55) email = models.EmailField(max_length=100) password = models.CharField(max_length=55) created_date = models.DateField(auto_now_add=True) updated_date = models.DateField(auto_now=True) def __str__(self): return f'{self.site_name}'
修改后执行数据库迁移:
python manage.py makemigrations python manage.py migrate
补充说明
- 加上
@login_required后,未登录用户访问该页面会自动跳转到登录页(需在settings里配置LOGIN_URL)。 - 过滤后的
saved_info仅包含当前登录用户的Locker数据,模板循环展示时只会显示自己的内容。
内容的提问来源于stack exchange,提问作者Deyemi-Hay
相关产品推荐
相关产品推荐

