Django PermissionRequiredMixin重定向到带有消息的登录模板

时间:2016-10-06 16:00:09

标签: django django-templates django-permissions

我得到了这个视图,我正在使用PermissionRequiredMixin ...它工作正常但是当我重定向到登录模板(在设置LOGIN_URL中设置)时我需要它显示一条消息“您无权执行此操作”。知道怎么做而不创建自定义装饰器,只使用PermissionRequiredMixin本身吗?

from django.contrib.auth.mixins import PermissionRequiredMixin

class MyView(PermissionRequiredMixin,View):

    template = 'myapp/item_detail.html'
    permission_required = 'myapp.change_item'


    def get(self, request, *args, **kwargs):
        #Query here
        return render(request, self.template)

为了达到这个目的,我需要添加什么?

2 个答案:

答案 0 :(得分:2)

您应该使用the messaging framework。要添加自己的消息,请简单覆盖:

from django.contrib import messages

class MyView(...):
    ...

    def handle_no_permission(self):
        # add custom message
        messages.error(self.request, 'You have no permission')
        return super(MyView, self).handle_no_permission()

您还需要将以下内容添加到base.html(或登录表单)中:

{% if messages %}
<ul class="messages">
    {% for message in messages %}
        <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}

答案 1 :(得分:1)

您可以尝试这种方法:

  1. 在视图中覆盖handle_no_permission(self):

    from django.contrib import messages
    from django.contrib.auth.mixins import PermissionRequiredMixin
    
    class MyView(PermissionRequiredMixin,View):
    
        template = 'myapp/item_detail.html'
        permission_required = 'myapp.change_item'
    
        def handle_no_permission(self):
            messages.error(self.request, 'You don\'t have permission to do this')
            return super(MyView, self).handle_no_permission()
    
  2. 确保登录模板中的messages are visibledjango.contrib.messages已添加到INSTALLED_APPS。