仅使用Django admin能创建面向终端用户的网站吗?

3 投票
3 回答
605 浏览
提问于 2025-04-15 17:42

我刚接触Django,之前从没用过这个框架。

我想开发一个网站,只有经过认证的用户才能使用某些功能(这在企业中很常见:为了讨论方便,我们假设这是一个私人博客平台)。

我想要的功能有:

  • 用户可以创建新的博客。
  • 每个用户可以加入多个小组:用户只能查看和评论自己所在小组成员创建的博客文章。
  • 每个用户只能修改或删除自己创建的帖子。

在我看来,这基本上是一个带有访问控制的CRUD应用(CRUD就是创建、读取、更新和删除的意思),而且Django的管理应用似乎已经内置了很多这样的功能。我想知道,单靠管理应用能否开发出完整的应用(不是原型,而是可以发布的高质量解决方案),还是说我应该考虑其他的方式(比如通用视图?模型表单?)

我在尝试估算这个项目需要多长时间(学习加上实现),所以你们的反馈可以让我更清楚,同时也能教我一些Django的知识 :)

补充一下:我特别担心的是每个对象或每行的权限问题。Django的维基上说权限系统不支持这个,那我还能继续使用管理应用吗?

3 个回答

0

关于管理员中的行级权限,在Django的SVN版本中,你可以重写has_add_permissionhas_change_permissionhas_delete_permission这几个方法,这样就能自己实现自定义的权限逻辑,并且这个逻辑会在整个管理员界面中生效。我很确定这个功能会在今年的1.2版本中推出。虽然现在文档里似乎还没有相关内容,但如果你能找到Django源代码中的django/contrib/admin/options.py文件,里面的默认方法和具体的说明都在文档字符串里。

不过,我不建议把整个应用都放在管理员界面里。虽然在用户撰写帖子和创建博客的部分这样做没问题,但如果只是用来展示数据,管理员界面就不太合适,除非你写很多自定义代码。在Django中,写可以展示对象和提交评论的视图其实并不难,大部分工作都在模板里。

0

从常识来看,你真的不应该把一个可能规模很大的项目建立在Django-Admin上。这听起来有点傻,很多人对Django-Admin非常着迷,以至于他们的书里专门有一章讲什么时候该用它,什么时候又不该用它。

我觉得,为了让后台看起来像个体面的站点,你需要做很多黑客式的修改,不如趁这个周末好好学学你想要使用的工具,真正做一个网站。你所描述的事情在逻辑上根本不算什么了不起的事。

这个场景让我想起了老版的加菲猫卡通,里面有个家伙给猫买了一个非常贵、看起来很棒的床,但猫却选择在床的盒子里睡觉。

2

修订版。在你想要对每个对象设置权限之前,答案是肯定的。

一旦你想要对一个博客进行权限设置,而博客其实就是一行数据,你就需要写一些代码了。

你完全可以重复使用管理界面的一些元素。你有所有的源代码,可以去阅读它。

你想要的很多功能都是通过在管理功能外面加上“包装器”来实现的。

  1. 你需要写一个“包装器”视图函数,用来检查对象的权限。

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

之后,你还需要调整管理页面的样式表,让它看起来更符合你的喜好。

撰写回答