防止登录的用户变量在django中的不同上下文中更改

时间:2015-10-04 11:20:37

标签: django django-views django-authentication django-users

我正在使用Django 1.8.4和Django-registration-redux来处理用户注册。我的问题是:

当用户登录时,即詹姆斯,我想在工具栏中显示他的用户名。但问题是当我访问另一个用户的个人资料时,即。 mike,工具栏中的用户名也变为mike。这是绝对禁止的。

我在我的视图中以用户身份登录用户,以检查登录用户是否与当前访问过的用户个人资料相同。

我不确定是否应该阻止request.user更改不同的上下文或我的代码中存在问题:

urls.py

url(r'^users/(?P<slug>\w+)/$', UserProfileDetailView.as_view(), name="profile"),

views.py

class UserProfileDetailView(DetailView):
    model       = get_user_model()
    slug_field  = "username"
    template_name = "user_detail.html"

    def get_object(self, queryset=None):
        user    = super(UserProfileDetailView, self).get_object(queryset)
        UserProfile.objects.get_or_create(user=user)
        return user

base.html文件

{% if user.is_authenticated %}
    <a href="{% url 'link_create' %}">Submit Link</a> |
    <a href="{% url 'logout' %}">Logout</a> |
    <a href="{% url 'profile' slug=user.username %}"><b>{{ user.username }}</b></a> 
  {% else %}
    <a href="{% url 'registration_register' %}">Register</a> |
    <a href="{% url 'login' %}">Login</a> 
{% endif %}

user_detail.html

{% if object == request.user and request.user.is_authenticated %}
    <p><a href='{% url "edit_profile" %}'>Edit My Profile</a></p>
{% endif %}

1 个答案:

答案 0 :(得分:1)

您的上下文中有2个用户:

  1. object(或user - DetailView也会在小写的模型名称上返回当前对象)这是您正在查看的用户
  2. request.user - 这是当前登录的用户
  3. 您在工具栏中使用了user.name而不是request.user.name。这导致了问题。