我得到了这个视图,我正在使用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)
为了达到这个目的,我需要添加什么?
答案 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)
您可以尝试这种方法:
在视图中覆盖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()
确保登录模板中的messages are visible和django.contrib.messages
已添加到INSTALLED_APPS。