2015-10-04 59 views
1

我正在使用Django 1.8.4和Django-registration-redux来处理用户注册。我的问题是:防止登录用户变量在Django的不同上下文中更改

当用户登录时,即詹姆斯,我想在工具栏中显示他的用户名。但问题是当我访问其他用户的个人资料时,麦克风,工具栏中的用户名也会更改为麦克风。这是绝对禁止的。

我在我的视图中登录用户作为对象来检查登录用户是否与当前访问的用户配置文件相同。

我不知道我是否应该阻止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 %} 
+0

编辑配置文件链接是否显示在不同的(不是登录的用户)用户的配置文件页面上? –

+0

你为什么要在UserProfileDetailView中返回一个用户对象? –

+0

@RahulGupta不,编辑个人资料链接仅显示登录用户,他正在访问他自己的个人资料页面。 – sheshkovsky

回答

1

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

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

您已经使用user.name而不是request.user.name。这是造成问题。

相关问题