【问题标题】:Multiple applications with django使用 django 的多个应用程序
【发布时间】:2023-03-03 23:49:01
【问题描述】:

我正在研究 Django 框架,阅读文档,但没有找到关于如何在同一个项目上创建多个应用程序的参考资料,其中每个应用程序都有多个应用程序。例如,应用程序博客,应用程序用户,评论,帖子,......,实施和任务应用程序客户端,用户,附件......我应该怎么做?

localhost
localhost/blog/ (posts, user, comment, ...)
localhost/tasks/ (task, user, attachment, ...)

<my project>
-- manage.py
-- <project name>
-- -- blog
-- -- -- posts
-- -- -- -- views.py
-- -- -- -- urls.py
-- -- -- -- models.py
...
-- -- tasks
-- -- -- attachments
-- -- -- -- views.py
-- -- -- -- urls.py
-- -- -- -- models.py
...

【问题讨论】:

    标签: python django frameworks


    【解决方案1】:

    每个应用的文件夹中都有这些:

    • views.py
    • models.py
    • 其他选项(admin.py...)

    所以,你有:

    Project
    -- manage.py
    -- Project
    -- -- views.py
    -- -- models.py
    -- -- others
    -- -- APP1
    -- -- -- views.py
    -- -- -- models.py
    -- -- -- others
    -- -- APP2
    -- -- -- views.py
    -- -- -- models.py
    -- -- -- others
    -- -- APPX
    -- -- -- views.py
    -- -- -- models.py
    -- -- -- others
    

    实用程序是功能之间的区别(如果您有通知应用程序和通知模型,请调用 Notification.models.notification)。

    模型是对象的架构。因此,您将调用例如 User.username 或 Task.name。 Django 会在数据库中自动创建表。

    另一个 Django 工具:您可以使用管理视图(可以编辑、创建、编辑使用您的模型的对象)或更改此界面(看that page

    如果您愿意,您可以创建一个识别系统并创建表单,您可以使用自己的管理系统。

    用你的例子:

    <my project>
    -- manage.py
    -- <project name>
    -- -- urls.py
    -- -- models.py <--- User model exists in Django and here you can add informations to the defaut model it is in this file because I suppose it will be used in all your project.
    -- -- views.py
    
    -- -- blog    <--- It's an app.
    -- -- -- -- views.py 
    -- -- -- -- urls.py
    -- -- -- -- models.py <--- Posts, Comments are models for the blog, so you explain them here.
    
    -- -- tasks   <--- Another app.
    -- -- -- attachments
    -- -- -- -- views.py
    -- -- -- -- urls.py
    -- -- -- -- models.py  <--- Task model for exemple
    

    【讨论】:

    • 祝你好运!两周前我就是你的情况,现在我认为 django 是一种令人难以置信的语言!
    • 我开始在家庭自动化大学使用 ZigBee 网络研究它
    • 我有类似的结构,我的应用是 app1 和 app2。现在,当我在 app2 中请求 about 页面时,它仍然会从 app1 呈现页面。对于第一个 app1,我将其作为 urlpattern /project/app1/,而对于第二个,我将 /project/app2/about.html --shows 来自第一个应用程序。
    • 如果有用户可以发布或创建任务,将用户模型放在哪里 - 在博客或任务应用程序中?或者如果您建议创建另一个应用程序(用户),那么应该如何定义用户帖子/用户任务关系?
    【解决方案2】:

    你应该了解的关于 django 的事情:

    1. URL 映射与文件系统或应用程序代码无关。这意味着您的 URL 与您的代码没有一对一的关系。您可以有多个 URL 指向同一段代码(指向同一视图)。这与 PHP 不同,例如,URL 映射到文件系统。

    2. 应用程序不是“小部件”或“portlet”。应用程序只是一个 python 模块,其中包含一些文件(views.pymodels.py__init__.py);您可以拥有任意数量的应用程序。您还可以拥有使用 URL 无法访问的应用程序——它们只是为了支持其他应用程序;并且您的应用程序也不必与 URL 同名。

    请记住这一点……您可以创建一个应用程序,将其命名为www,并在其views.py 中定义这些极具创意的命名方法:

    def blog(request):
       pass
    
    def tasks(request):
       pass
    

    现在在您的urls.py 中,您可以拥有:

    url(r'^blog/$','www.views.blog',name='blog-index'),
    url(r'^blog/posts/$','www.views.blog',name='blog-posts',kwargs={'view_posts': True}),
    url(r'^tasks/$','www.views.tasks',name='task-index'),
    url(r'^tasks/attachments/$','www.views.tasks',name='task-attachments'),
    

    【讨论】:

    • 将 Django 与 PHP 进行比较是不恰当的。 Django 是 Python 之上的一个框架。 PHP 可以与 python 或 Jinja 模板语言进行比较,但不是 Django。
    • 非常明确的答案!谢谢
    【解决方案3】:

    您对应用是什么感到困惑。应用程序只是相关功能的集合,通常(但不一定)包括模型、视图和模板。

    “用户”不是一个应用程序——它是一个模型,但您通常会使用内置的 django.contrib.auth 应用程序来提供用户功能。任何应用程序都可以使用任何其他应用程序的代码,包括模型。您可以在一个应用中拥有任意数量的模型。

    【讨论】:

    • 如果我需要在不使用 contrib.admin 的情况下使用管理界面制作我的网站怎么办。如何分离逻辑? “这个视图是管理界面,这是公共界面”?
    • 如果你愿意。或者将其拆分为两个视图文件 - 视图只是 Python 函数,它们可以存在于任何地方。或者为所有其他应用程序的所有管理功能提供一个单独的应用程序。这取决于你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 2014-08-15
    • 1970-01-01
    • 2013-01-31
    • 2012-09-03
    • 2019-02-05
    • 2021-06-04
    相关资源
    最近更新 更多