Django PermissionRequiredMixin 重定向到带有消息的登录模板
Django PermissionRequiredMixin redirect to login template with message
我得到了这个视图,我在上面使用 PermissionRequiredMixin
...它工作正常,但是当我重定向到登录模板(在设置 LOGIN_URL
中设置)时,我需要它显示一条消息那里像 "You don't have permission to do this"。知道如何在不创建自定义装饰器的情况下做到这一点,只使用 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)
我需要添加什么才能实现这一目标?
你可以试试这个方法:
- 在您的视图中覆盖
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
。
你应该使用 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 %}
我得到了这个视图,我在上面使用 PermissionRequiredMixin
...它工作正常,但是当我重定向到登录模板(在设置 LOGIN_URL
中设置)时,我需要它显示一条消息那里像 "You don't have permission to do this"。知道如何在不创建自定义装饰器的情况下做到这一点,只使用 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)
我需要添加什么才能实现这一目标?
你可以试试这个方法:
- 在您的视图中覆盖
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
。
你应该使用 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 %}