如何使Django的permission_required装饰器不将已登录的用户重定向到登录页面,而是显示一些消息
如何使Django的permission_required装饰器不将已登录的用户重定向到登录页面,而是显示一些消息,例如权限不足?
谢谢。
How can make Django permission_required decorator not to redirect already logged-in users to login page, but display some message like Insufficient permissions?
Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
由于 django 1.4
permission_required
有一个raise_exception
参数,您可以将其设置为 True 以拥有未经授权的PermissionDenied 引发异常,例如。 举一个基于类的视图的例子:
Ref:permission_required 装饰器文档
Since django 1.4
permission_required
has araise_exception
parameter that you can set to True to have an unauthorized PermissionDenied exception raisedEg. to give an exemple on a Class Based View:
Ref:permission_required decorator doc
一个快速而肮脏的解决方案是编写自己的装饰器来执行此操作。 像这样:
然后你可以这样装饰你的视图:
A quick and dirty solution would be to write your own decorator to do this. Something like this:
You can then decorate your view thus:
你可以编写自己的装饰器来替换 django 的
permission_required
装饰器:并以同样的方式使用它:
无权限登录的用户将收到 403 禁止错误。 未登录的用户将被重定向到登录页面。
You can write your own decorator to replace django's
permission_required
decorator:And use it the same way:
Logged in users with no permission will get a 403 forbidden error. Those who are not logged in will be redirected to the login page.
我假设这个问题需要两部分
@Manoj Govindan 的答案和 @Stefano 的答案都不会工作。 @Lidor 的答案是可行的,但他已经完全重新实现了permission_required 函数。
这是一个更简单的方法:
这样,如果用户未登录,他们将被重定向。 如果他们是,但他们没有权限,他们将会出错。
I'm assuming this question requires two pieces
@Manoj Govindan's answer nor @Stefano's answer will not work. @Lidor's answer will work, but he has fully re-implemented the
permission_required
function.Here is a simpler way:
With this, if the user is not logged in, they will be redirected. If they are but they don't have permissions, they will be down an error.
您可以向装饰器添加参数“login_url”:
You can add a parameter "login_url" to the decorator:
我遇到了同样的问题,但在
@permission_required
装饰器中了解了raise_exception
参数!该参数默认为
False
,但是一旦您将True
值传递给它,它将自动将未经许可的用户重定向到403.html
页! (如果你的项目根目录下有403.html
页面,否则显示服务器403禁止页面!在此处阅读 Django 文档的更多内容
I had the same problem but learned about
raise_exception
parameter at the@permission_required
decorator!this parameter is
False
by default, but once you pass it theTrue
value, it will automatically redirect the without permission user to the403.html
page! (if there was any403.html
page in the root of your project, otherwise shows the server 403 forbidden page!read more in Django docs here