如何解决如何在主要的只读Django网站上最好地实现仅管理员页面和特定于管理员的视图?
| 我正在写一个Django网站。它几乎是一个只读网站,但管理员对网站执行一些更新操作。我希望管理员通过网站的前端进行编辑。 为此,对于管理员,某些URL的显示方式有所不同,除非请求来自已登录的管理员,否则某些URL应该返回404。 我不想让管理员用户的存在对匿名用户尤为明显,因此,如果该用户尚未以管理员身份登录,那么仅管理员页面的404即可。 目前我的设计是: 在服务器级别,将两个主机名用作同一单个Django站点的别名: admin.example.com www.example.com 在Django应用程序级别,对于每个仅管理员视图或对于管理员显示不同的视图,请检查请求的主机名是否为“ 0”。如果是: 如果请求来自登录的管理员,请返回具有管理员特定显示的页面 否则,返回404 具有管理员可以手动登录的URL。 这是愚蠢的吗?我是否错过了一种更简单/更好的方法?解决方法
在最简单的级别上,您可以在特定于管理员的视图上使用
user_passes_test
装饰器:
@user_passes_test(lambda u: u.is_superuser)
def only_admins_here(request):
#do stuff
或者您可以简单地在视图中分支:
def some_view(request):
if request.user.is_superuser:
render_to_response(\'admin_template.html\')
else:
render_to_response(\'template.html\')
在此之上创建整个子域层将很快变得非常复杂,因为Django中并非所有类和函数都必须有权访问请求对象,因此,请求来自哪个域。
, 您可以删除第一点。
在Django应用程序级别,对于每个仅属于管理员的视图或对于管理员显示不同的视图,请检查请求是否来自登录的管理员。
如果请求来自登录的管理员,请返回具有管理员特定显示的页面
否则,返回404
具有管理员可以手动登录的URL。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。