2015-10-04 21 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。這是造成問題。

相關問題