2013-10-07 100 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'),