我想为Django DetailView添加条件

时间:2017-12-14 10:32:09

标签: python django django-generic-views detailview

我正在使用Django Generic视图,DetailView。 但我想阻止用户访问尚未发送email_confirmed的详细信息。 我在User模型中有一个email_confirmed字段。

我的代码是:

@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',但我不知道该怎么做)

1 个答案:

答案 0 :(得分: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

这会将没有email_confirmed的用户重定向到login_url,您可以在其中显示错误消息。为了使用index.html模板,您可能需要覆盖handle_no_permission方法。