防止登录用户变量在 Django 的不同上下文中发生变化

Prevent logged in user variable from changing in different context in django

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

当用户登录时,即 james,我想在工具栏中显示他的用户名。但问题是当我访问另一个用户的个人资料时,即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 %}

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

  1. object(或 user - DetailView 也将 return 当前对象的小写模型名称)这是您正在查看的用户
  2. request.user - 这是当前登录的用户

您在工具栏中使用了 user.name 而不是 request.user.name。这导致了问题。