2013-10-07 102 views
0

我正在構建一個需要用戶配置文件的小應用程序,我用Django的用戶系統構建。但我有一個關於即使您沒有登錄,你仍然可以查看配置文件還另一件事是,每個用戶只能看到他的輪廓不是別人,我需要在這Django登錄需要查看

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 

class UserProfileEditView(UpdateView): 
    model = UserProfile 
    form_class = UserProfileForm 
    template_name = "edit_profile.html" 

    def get_object(self, queryset=None): 
     return UserProfile.objects.get_or_create(user=self.request.user)[0] 

    def get_success_url(self): 
     return reverse("profile", kwargs={"slug": self.request.user}) 

回答

-2

下面是你應該做的通常

@login_required 
def my_view(request, uid): 
    # uid = user id taken from profile url 
    me = User.objects.get(pk=uid) 
    if me != request.user: 
     raise Http404 
+0

這是不是做的方式爲Django CBV。 – Joseph

+0

在CBV中,他不能僅僅在調度方法上使用@login_rquired嗎? –

+0

這意味着覆蓋每個方法(如果他使用來自其他應用程序的視圖),只需添加裝飾器並調用重疊。非常不整潔。 – WhyNotHugo

2

由於您使用的是Class Based Generic View,你需要添加裝飾@login_requiredurls.py

#urls.py 

from django.contrib.auth.decorators import login_required 
from app_name import views 

url(r'^test/$', login_required(views.UserProfileDetailView.as_view()), name='test'),