Django论坛App项目结构

时间:2013-06-14 23:05:51

标签: python django django-models

编辑:我是这个网站的新手,但如果你打算投票给我,你能解释一下原因吗?我搜索了谷歌,这个网站和其他网站,但没有发现任何有意义的内容,我认为这是一个提问和获得帮助的网站。

我有一个自定义PHP论坛,我试图转换为Python / Django作为学习经验,我遇到了一些问题。我一直在阅读Django,我们鼓励我们的应用程序分成多个应用程序。我浏览了6部分教程和文档的许多其他部分,但我留下了一些问题。

我们假设我有大约30张桌子。

表格如: 基本论坛的posts_index,posts,users,user_groups,user_activity,user_sessions,forums,payment_gateways,payment_logs等

我遇到了构建模型的问题。使用PHP,我需要的是index.php,/ admin / index.php,view_forum.php,view_thread.php和其他一些,一切都可以直接从数据库中提取,我没有问题,但现在我必须处理应用程序/模块。

我认为我需要以类似于此的方式构建我的应用程序:

/admin/ app
/forums/ app
/view_forum/ app
/view_thread/ app
/forums/view_forum/ app (instead of just /view_forum/, could be a sub app)
/forums/view_thread/ app (instead of /view_thread/, could be a sub app)

我的问题和唯一的问题是处理全球状态。例如,用户/组/会话/日志/权限信息将需要通过导入其他应用程序模型文件在多个应用程序之间共享。要做到这一点,我需要引用他们的模型信息,处理这个问题的正确方法是什么?

这些中的任何一个都可以接受吗?

  1. 创建大量不同的应用程序,例如/ users /,它们会为我的users_groups,用户,user_sessions,另一个/ posts /应用程序建模,其中包括posts_index,论坛等模型,这些模型已经存在但是实际上并没有公开使用,它们只会在其他应用中使用。它们将在/ view_forum / app等区域中导入,因为在查看论坛时我可能需要确定用户是否已登录,是否是特定组的成员等,因此需要访问多个隐藏的应用程序,因此将从隐藏的应用程序导入。

  2. 如果我只有一个应用程序,而不是它是一个应用程序,它将只是我的整个项目。这对我来说听起来是最好的解决方案,但如果我们不能将整个应用程序总结为需要拆分的句子,似乎有人建议。如果我使用一个单独的应用程序作为我的整个项目,我的模型文件将有30多个不同的模型,这是可以接受的吗?我假设没有,但想到我会问。

  3. 上述任何一种都有意义吗?如果没有,你会做什么修复?我承认我输了,所以任何反馈意味着很多。

    我是Python / Django的新手,我正在努力解决问题。我希望我清楚自己要做什么。我非常欢迎任何建议。我一直在努力解决问题,但我认为向更有经验的开发人员寻求建议会更好。我不是一个专业的程序员,我还在学习,所以请保持友好:)。

2 个答案:

答案 0 :(得分:1)

我投了这个...当我第一次搬到Django(也来自PHP)时,我有类似的问题

尽量不考虑db表(或url路径)方面的应用程序,你想为独立的功能部分创建应用程序。

我想说你的大多数代码都会放在一个forum个应用中,其中包含ForumPost个模型以及所有与论坛相关的网址,例如/view_forum//view_thread/。请注意,Django中不存在子应用程序......这些是不同的视图,它们都属于单个应用程序中的一组相关功能。

'用户'的东西......你通常想要挂钩到Django auth系统(https://docs.djangoproject.com/en/dev/topics/auth/default/#user-objects)但是如果你试图保留遗留数据库结构这可能会更难...你可能会结束需要您自己的users应用

支付网关的内容听起来像是另一个应用程序。

对于管理员来说,你可以免费获得这个(几乎)Django:
https://docs.djangoproject.com/en/1.5/ref/contrib/admin/
每个应用程序中都需要一个admin.py,您可以在其中注册要向管理站点公开的模型。

您可能会发现最好遵循教程并构建一个简单的博客(或尝试从头开始构建一个非常简单的小型论坛),以便在处理重写之前了解Django。因为尝试使用遗留数据库表来精确地重新创建旧功能将会更加困难,并且可能会导致您进入不是“好Django”的模式。

您可能还会发现查看现有Django论坛应用程序的源代码非常有用,例如: https://bitbucket.org/slav0nic/djangobb/src/
他们只有一个djangobb_forum个应用程序可以完成所有工作。我认为这是完全合理的,因为论坛是一个复杂的功能。

请注意他们的Profile模型如何通过auth.User有效地扩展内置的Django OneToOneField模型。这样就可以更容易地与内置的登录和身份验证系统集成。

答案 1 :(得分:0)

首先整合您的legacy database,然后构建Admin site。您将看到管理员应用程序和您编写的每个其他应用程序的模型信息的可用性。关键是应用中的import models