【问题标题】:Django - View Other user profileDjango - 查看其他用户资料
【发布时间】:2015-05-14 04:42:35
【问题描述】:

我正在使用 Django 1.6 创建一个 Web 应用程序。我有用户和用户配置文件,并设计了模板来显示用户的配置文件信息。

class UserProfile(models.Model):
    class Meta:
        app_label = 'xyz'

    user = models.OneToOneField(User, related_name='user_profile')
    description = models.CharField(max_length=200)
    ... other fields ...

我在模板上有各种编辑按钮,用户可以在其中查看他的个人资料信息。此外,用户可以查看其他用户的个人资料。在这种情况下,用户应该看不到编辑、删除或添加按钮。

是否有针对此的内置安全机制?使用 Django 1.6 实现这一点的最佳方法是什么?

提前致谢。

【问题讨论】:

    标签: django python-3.x django-models django-templates django-views


    【解决方案1】:

    Django 对每个模型都有一组默认的permissions(更改、添加、删除)。您可以在模板中使用它们来隐藏按钮,或者使用简单的检查显示的用户是否也是查看页面的用户。

    {% if perms.accounts.change_user %}
    Edit
    {% endif %}
    

    {% if edit_user == user %}
    Edit
    {% endif %}
    

    然后在您的 POST 请求视图中,您还想检查是否有人试图更改另一个用户并返回 HttpResponseForbidden。

    from django.http import HttpResponseForbidden
    
    ...
    
    if not request.user == user:
        return HttpResponseForbidden()
    

    【讨论】:

    • 感谢您的解决方案...很想知道是否有其他简单的解决方案,以避免模板中的 ifs.. :)
    • 在我的脑海中......你可以1)使用一个变量is_own_profile,它要么是空的,要么包含一个css类的名称,它使所有子元素中的所有按钮都隐藏起来,或者2)如果 is_own_profile 为 false,则执行一个小 javascript 函数来隐藏按钮,因此您可以使用单个“if”。
    • 这个解决方案不会引入安全威胁吗?
    • 不,如果有没有表单和按钮,用户总是可以构造和发送他自己的 POST 请求。这就是为什么您需要在后端验证用户是否被允许进行更改。
    猜你喜欢
    • 1970-01-01
    • 2022-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    相关资源
    最近更新 更多