2017-12-14 1 views
0

장고 일반보기, DetailView를 사용하고 있습니다. 하지만 아직 이메일 확인을하지 않은 세부 게시물에 액세스하도록 사용자를 차단하고 싶습니다. 사용자 모델에 email_confirmed 필드가 있습니다.Django에 조건을 추가하고 싶습니다. DetailView

내 코드는 다음과 같습니다

@method_decorator(login_required(login_url='/login/'), name='dispatch') 
class RecruitView(generic.DetailView): 
    model = Recruit 
    template_name = 'recruit.html' 

내가 추가 할 :

if not request.user.email_confirmed: 
     error_message = "you did not confirmed yet. please check your email." 
     return render(request, 'info.html', {'error_message': error_message}) 
    else: pass 

가 어떻게 DetailView이 조건을 추가 할 수 있습니까?

는 (나는 'as_view'을 무시하려하지만 난 그것을하는 방법을 모른다)

답변

2

나는 PermissionRequiredMixin를 사용합니다. 이를 통해 사용자가 필요로하는 특정 권한을 지정하거나 has_permission 메소드를 무시할 수 있습니다.

from django.contrib.auth.mixins import PermissionRequiredMixin 

class RecruitView(PermissionRequiredMixin, generic.DetailView): 
    ... 

    login_url = '/login/' 
    permission_denied_message = 'you did not confirmed yet. please check your email.' 

    def has_permission(self): 
     return self.request.user.email_confirmed 

는 오류 메시지를 표시 할 수 login_urlemail_confirmed없이 사용자를 리디렉션합니다. 대신 index.html 템플릿을 사용하려면 handle_no_permission 메소드를 재정의해야 할 수 있습니다.

+1

권한을 확인하지 않으므로 ['UserPassesTestMixin'] (https://docs.djangoproject.com/en/2.0/topics/auth/default/#django.contrib.auth)을 사용하는 것이 더 깔끔할 수 있습니다. .mixins.UserPassesTestMixin),'test_func'를 오버라이드 (override)합니다. – Alasdair

+0

와우! 그것은 나의 첫번째 질문이었고, 나는 매우 인상적이다 !! 너무 고마워, 너는 나를 구해 줬어. :) –

관련 문제