Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 您如何在项目中实际使用可重用的django应用程序?_Python_Django_Code Reuse_Reusability_Django Apps - Fatal编程技术网

Python 您如何在项目中实际使用可重用的django应用程序?

Python 您如何在项目中实际使用可重用的django应用程序?,python,django,code-reuse,reusability,django-apps,Python,Django,Code Reuse,Reusability,Django Apps,这个问题已经困扰我好几天了,我试着在很多地方征求意见,但似乎没有人能清楚地回答,甚至没有人能提供答案的参考 我也尝试过搜索教程,但我找不到任何类型的教程来解释如何使用可重用的第三方django应用程序(大多数教程解释如何编写它们,没有一个解释如何使用它们) 另外,我在这里看了一下: -它没有解释如何在项目本身中实际使用它 在这里: -aquaplanet的回答有点道理,但我想我会问这个问题来解决我在试图理解这一点时面临的心理障碍 为了更好地解释这一点,让我举个例子(请注意,这不是我实际正在构建

这个问题已经困扰我好几天了,我试着在很多地方征求意见,但似乎没有人能清楚地回答,甚至没有人能提供答案的参考

我也尝试过搜索教程,但我找不到任何类型的教程来解释如何使用可重用的第三方django应用程序(大多数教程解释如何编写它们,没有一个解释如何使用它们)

另外,我在这里看了一下:

-它没有解释如何在项目本身中实际使用它

在这里:

-aquaplanet的回答有点道理,但我想我会问这个问题来解决我在试图理解这一点时面临的心理障碍


为了更好地解释这一点,让我举个例子(请注意,这不是我实际正在构建的东西)。

我正在创建一个类似Reddit的项目。我将拥有用户、链接和投票/积分。基于这个粗略的例子,我想重用3个(任意)第三方应用程序:用户、投票/积分和链接

我决定将它们作为任何其他python包使用(这意味着它们将被视为一个包,不应触碰它们的任何代码)[这种方法真的有效吗?或者你必须能够编辑第三方应用程序来构建项目吗??)

现在我的项目中有了这些应用程序,我将使用一个主应用程序来处理所有模板内容(这意味着我在前端看到的所有内容都将在一个应用程序中)

然后,我将使用同一个主应用程序进行自定义逻辑(在views.py中),或者在不同的应用程序之间分解该逻辑(但仍然只使用一个前端应用程序)

从以上3段来看,该结构是否适用(或是否可行)


现在让我们假设这个结构是适用的,我使用一个主应用程序作为前端和自定义逻辑

我会在models.py中写什么?我会如何将3个可重用应用程序中的内容集成到主models.py文件中

如何引用views.py中的可重用应用程序?让我们以contrib.auth为例

使用此内置应用程序,对于注销,我会写:

从django.contrib.auth导入注销
从django.contrib.auth.decorators导入所需的登录名
从django.shortcuts导入重定向
@需要登录
def用户_注销(请求):
注销(请求)
返回重定向(“/home/”)
尽管上面的代码很简单,但对于任何可重用的应用程序,基本上都是这样吗


我的问题很长,但我认为这个可重用应用程序的问题是很多开发人员自己都不太清楚的,也许这个答案会帮助很多其他人,他们听说了可重用应用程序的承诺,但不知道如何实际使用它们。

我不知道为什么你认为你需要一个主要的应用程序来解决这个问题“前端”的东西。一个可重用的应用程序的要点是它能处理一切,你只需(通常)添加一个URL来包含应用程序的URL.py,再加上你自己的模板和样式

你当然不需要在自己的视图中包装应用程序的视图,除非你特别想覆盖某些功能

我完全不理解你关于模型的问题。没有“主”模型文件,使用可重用应用程序的模型与使用你自己应用程序的模型是一样的

通常情况下,您不会编辑第三方应用程序,这会导致很难集成更新。只需使用pip将应用程序安装到您的virtualenv(当然,您正在使用virtualenv!)中,这将把它放在lib目录中,您可以像其他任何应用程序一样引用它。请确保将其添加到已安装的应用程序中。

TL;DR: 不&这取决于

一些(非常)常见的可重用应用程序
…这些都是可重用的Django应用程序,碰巧是随Django一起提供的(在某个时间点上,大多数都不是)

好的,Django不附带的其他一些可重用应用程序:

这些都是真正可重用的应用程序,还有很多类似的应用程序

他们是怎么做到的? 在我看来,你的问题更像是“我如何构建可重用的应用程序”,然后是“如何使用它们”。实际上,不同的应用程序使用它们是非常不同的,因为它们做的事情非常不同。只有一条规则:也没有办法

通常,他们依赖以下一项或多项:

  • settings.py中的附加值
  • url.py添加(通常是一个
    include
    语句)
  • 模型、表单、字段、视图等的子类化和/或混合
  • 模板标记和/或过滤器
  • 管理命令
<> P>这些都是强大的方法,尽管你的应用程序可以很强的为其他应用程序提供< /强>功能。没有一个配方(AFAIK)来制作一个可重用的应用程序,因为有很多不同的场景需要考虑。这完全取决于你的应用程序应该做什么。

可重用应用程序提供功能 我认为,重要的是不要将可重用的应用程序视为与其他应用程序“协同工作”,而是要认识到它们“提供功能”。提供的功能的详细信息应该决定目标开发人员应该如何使用您的库

不是所有的东西都应该是可重用的
显然,即使许多应用程序“原则上”可以重复使用,但这样做通常没有什么意义,因为将东西组合在一起(并使它们“一起工作”)要快得多。

“我不知道为什么你认为你需要一个主应用程序来处理“前端”的东西。“。我之所以认为这可能有效,是因为你希望一个前端在一个页面上与多个应用程序交互。比如说你是cre