【问题标题】:I would like to add condition to Django DetailView我想向 Django DetailView 添加条件
【发布时间】:2018-05-28 09:57:01
【问题描述】:

我正在使用 Django 通用视图 DetailView。 但我想阻止用户访问尚未 email_confirmed 的详细帖子。 我在用户模型中有一个 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' 但我不知道该怎么做)

【问题讨论】:

    标签: python django django-generic-views detailview


    【解决方案1】:

    我会使用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 方法。

    【讨论】:

    • 由于您没有检查权限,因此使用UserPassesTestMixin 并覆盖test_func 可能会更简洁。
    • 哇!这是我的第一个问题,我印象非常深刻!!非常感谢,你救了我:)
    猜你喜欢
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2013-07-11
    • 2019-05-06
    • 1970-01-01
    相关资源
    最近更新 更多