Joe*_*Joe 12 python django code-reuse reusability django-apps
这个问题一直困扰着我好几天了,我试过在很多地方寻求建议,但似乎没人能清楚地回答它,甚至提供答案的参考.
我也尝试过搜索教程,但是我找不到任何类型的教程来解释如何使用可重复使用的第三方django应用程序(大多数教程解释了如何编写它们,没有解释如何使用它们).
另外,我看过这里:
如何在Django中重用可重用的应用程序 - 它没有解释如何在项目本身中实际使用它
和这里:
如何将多个可重用的Django应用程序绑定在一起? - 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/')
虽然上面的代码很简单,但基本上是如何使用任何可重用的应用程序完成的?
我的问题很长,但我认为这个可重用的应用程序问题是很多开发人员对自己不太清楚的事情,也许这个答案会帮助很多其他人听说过可重用应用程序的承诺,但是没有了解如何实际使用它们.
不,这取决于...
...这些都是可重用的 Django 应用程序,碰巧随 Django 一起提供(其中大多数不是,在某个时间点)
好的,还有一些不随 Django 一起提供的可重用应用程序:
这些都是真正可重用的应用程序,仅此而已。还有很多这样的应用程序。
对我来说,您的问题更像是“我如何构建可重用的应用程序”,然后是“如何使用它们”。实际上使用它们在不同的应用程序之间是非常不同的,因为它们做的事情非常不同。只有一个规则:RTFM 也没有办法解决这个问题。
通常,他们依赖以下一项或多项:
settings.pyinclude语句)到urls.py这些都是您的应用程序可以为其他应用程序提供功能的强大方式。没有秘诀 (AFAIK) 可以制作可重用的应用程序,因为有很多不同的场景需要考虑。这完全取决于您的应用程序应该做什么。
我认为重要的是不要将可重用应用程序视为与其他应用程序“一起工作”,而是要认识到它们“提供功能”。所提供功能的详细信息应该决定目标开发人员应该使用您的库的方式。
很明显,即使许多应用程序“原则上”可以重复使用,但这样做通常没有多大意义,因为将事物聚集在一起(并使它们只是“一起工作”)要快得多。
我不确定您为什么认为您需要一个用于“前端”内容的主应用程序。可重用应用程序的要点在于它会处理所有事情,您只需添加(通常)一个 URL 来包含应用程序的 urls.py,再加上您自己的模板和所需的样式。
而且您当然不需要将应用程序的视图包装在您自己的视图中,除非您特别想要覆盖某些功能。
我完全不明白你关于模型的问题。不存在“主”模型文件之类的东西,使用可重用应用程序的模型与使用您自己的任何应用程序中的模型完全相同。
通常您不会编辑第三方应用程序,这将使集成更新变得非常困难。只需使用 pip 将应用程序安装在 virtualenv 中(当然,您正在使用 virtualenv!),这会将其放入 lib 目录中,您可以像任何其他应用程序一样引用它。确保将其添加到 INSTALLED_APPS 中。
| 归档时间: | 
 | 
| 查看次数: | 5154 次 | 
| 最近记录: |