使用Django admin单独创建面向最终用户的网站是否可行?

3

我对Django非常陌生,从未在其上开发过。

我正在尝试开发一个仅向经过身份验证的用户公开功能的网站(典型的企业应用:为了讨论方便,我们假设它是一个私人博客平台)。

我想要的功能是:

  • 用户可以创建新博客。
  • 每个用户可以属于多个组:用户只能查看/评论由他所属组成员创建的博客文章。
  • 每个用户只能修改/删除他自己创建的帖子。

我认为,这本质上是一个具有访问控制的CRUD应用程序,而管理应用程序似乎已经内置了许多此类功能。使用仅限于管理应用程序(不是原型,而是发布质量解决方案)来开发这个完整的应用程序是否可行,还是应该寻找其他方法(通用视图?ModelForms?)

我正在尝试估计这将需要多长时间(学习+实现),因此您的反馈可能会给我一个好主意,除了教我这个新的Django世界的方式 :)

编辑:特别是,我担心的是每个对象/每行权限。 Django维基百科说权限系统不支持它,那么我还能使用管理应用程序吗?


你不能只是使用Elgg而不是重新发明轮子吗? - Stefano Borini
@stefano 很遗憾,这实际上不是一个博客平台,而是一种内部企业工具。我不能谈论它(律师...),但它与博客功能足够相似,我用它作为例子。ELGG不支持内部数据对象。 - user244792
3个回答

2

修改后。在你只需要针对每个对象进行授权的情况下,答案是肯定的。

一旦你想要在博客上进行授权,其中博客只是一行数据,你就需要进行一些编码。

你完全可以重用管理界面元素。你拥有所有源代码,可以阅读。

大部分你想要的功能都是通过包装器("wrappers")来实现的管理函数。

  1. 你编写一个“包装器”视图函数来检查对象权限。

  2. 你的包装器视图函数调用管理视图函数。

之后,你需要修复管理页面中的样式表以符合你的喜好。


S.Lott,感谢您的快速回复。还有一个后续问题:我如何进行每个对象的权限控制?维基百科上说权限系统不支持此功能,那么管理员应用程序呢?[同时已更新上面的问题] - user244792
@Chinmay:你也可以使用这个项目:http://packages.python.org/django-authority/ 来进行对象权限控制,或者使用最新版本的Django trunk,该版本已经包含了这个补丁:http://code.djangoproject.com/ticket/11010 - Van Gale
另外,@LeafStorm在下面的回答中提到了“ModelAdmin对象上的has_add_permission、has_change_permission和has_delete_permission方法”,这非常有帮助。Django FAQ也提到了这一点,而管理应用程序文档没有提到。 - user244792

0
关于在管理界面中的行级权限,在 Django 的 SVN 版本中,您可以覆盖 ModelAdmin 对象上的 has_add_permission、has_change_permission 和 has_delete_permission 方法,以实现自定义权限逻辑,这将应用于整个管理界面。我相信这个功能将在今年的 1.2 版本中发布。虽然文档中似乎还没有这个功能,但是如果您能在 Django 源代码的 django/contrib/admin/options.py 文件中找到默认方法,精确的说明在 docstrings 中。
不过,我不建议在管理界面中完成整个应用程序。对于用户编写帖子和创建博客的部分,它可以正常工作,但是除非您编写大量自定义代码,否则管理界面不适合仅显示数据。在 Django 中编写可以显示对象并提交评论的视图并不难,大部分工作都在模板中。

0

就理性而言,您真的不应该基于Django-Admin来构建一个潜在的大规模项目。这有点傻,很多人都着迷于Django-Admin,他们甚至在书中专门讲解了何时使用它以及何时不要用它进行邪恶行为。

在我看来,为了使管理界面看起来像一个合理的个性化网站,你需要做很多的修改,你不如放假一周末,真正学习你想要篡改的工具,并制作一个真正的网站。从逻辑上讲,你所描述的并不是英雄所为。

这种情况让我想起了旧的加菲猫漫画,一个人买了一张非常昂贵和棒极了的床,但猫选择睡在床里的盒子里。


好的,好的,我明白了。这个周末会学习一下。但是,一个不懒惰的开发者是什么样子的呢?;) - user244792
虽然我同意你的一般观点,但我标记@lott的答案为被接受的,因为我认为它更好地回答了主题问题。不过还是非常感谢你的分享。 - user244792

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接