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

问题描述 投票:12回答:2

这个问题一直困扰着我好几天了,我试过在很多地方寻求建议,但似乎没人能清楚地回答它,甚至提供答案的参考。

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

另外,我看过这里:

How to re-use a reusable app in Django - 它没有解释如何在项目本身中实际使用它

和这里:

How to bind multiple reusable Django apps together? - aquaplanet的答案是有道理的,但我想我会问这个问题来解决我在试图理解这个问题时遇到的心理障碍。


为了最好地解释这一点,让我通过例子这样做(注意,这不是我实际建立的东西)。

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

我决定将它们中的每一个用作任何其他python包(意味着它们将被视为包,并且不应该触及它们的代码)[这种方法实际上会起作用吗?或者你必须能够编辑第三方应用程序来构建项目??)

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

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

从上面的3个段落来看,这个结构是否适用(或者它可以工作)?


现在让我们说这个结构是适用的,我正在使用一个主应用程序用于前端和自定义逻辑。

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

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

有了这个内置的应用程序,我会写:

from django.contrib.auth import authenticate, login, logout
@login_required
def user_logout(request):
logout(request)

return HttpResponseRedirect('/home/')

虽然上面的代码很简单,但基本上是如何使用任何可重用的应用程序完成的?

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

python django code-reuse reusability django-apps
2个回答
3
投票

TL; DR:

不,这取决于......

一些(非常)常见的可重用应用程序

...这些都是可重复使用的Django应用程序,恰好与Django一起发布(大部分都不是,在某个时间点)

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

这些都是真正可重复使用的应用程序,并没有更少。还有很多类似的应用程序。

他们是如何做到的呢?

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

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

  • 其他价值在settings.py
  • 另外(通常是一张include声明)给urls.py
  • 模型,表单,字段,视图等的子类化和/或混合。
  • 模板标签和/或过滤器
  • 管理命令
  • ...

这些都是强大的方式,您的应用程序可以为其他应用程序提供功能。没有配方(AFAIK)来制作可重复使用的应用程序,因为需要考虑很多不同的方案。这一切都取决于你的应用程序应该做什么。

可重用的应用程序提供功能

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

并非一切都应该是可重复使用的

显然,尽管许多应用程序“原则上”可以重复使用,但这样做通常没有多大意义,因为它可以更快地将事物聚集在一起(并使它们只是“一起工作”)。


0
投票

我不确定为什么你认为你需要一个主要应用程序的“前端”的东西。可重用应用程序的重点在于它可以处理所有内容,您只需添加(通常)单个URL以包含应用程序的urls.py,以及您自己的模板和样式。

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

我完全不了解你的模型问题。没有“主要”模型文件,使用可重用应用程序的模型与使用任何自己的应用程序中的模型相同。

通常,您不会编辑第三方应用程序,这会使集成更新变得非常困难。只需在你的virtualenv中安装应用程序(你当然是使用virtualenv!)和pip,它将把它放在lib目录中,你可以像任何其他应用程序一样引用它。确保将其添加到INSTALLED_APPS。

© www.soinside.com 2019 - 2024. All rights reserved.