繁体   English   中英

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

[英]How do you actually use a reusable django app in a project?

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

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

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

如何在 Django 中重用可重用的应用程序- 它没有解释如何在项目本身中实际使用它

和这里:

如何将多个可重用的 Django 应用程序绑定在一起? - aquaplanet 的回答有点道理,但我想我会问这个问题来解决我在试图理解这一点时面临的心理障碍。


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

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

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

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

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

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


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

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

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

使用这个内置应用程序,为了注销,我会写:

from django.contrib.auth import logout
from django.contrib.auth.decorators import login_required
from django.shortcuts import redirect

@login_required
def user_logout(request):
    logout(request)
    return redirect('/home/')

虽然上面的代码很简单,但是对于任何可重用的应用程序来说,这基本上是如何完成的吗?

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

特尔;博士:

不,这取决于...

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

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

好的,还有一些不随 Django 一起提供的可重用应用程序:

这些都是真正可重用的应用程序,仅此而已。 还有很多这样的应用程序。

他们是怎么做到的呢?

对我来说,您的问题更像是“我如何构建可重用的应用程序”,然后是“如何使用它们”。 实际上使用它们在不同的应用程序之间是非常不同的,因为它们做的事情非常不同。 只有一个规则: RTFM 也没有办法解决这个问题。

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

  • settings.py附加值
  • 添加(通常是一个include语句)到urls.py
  • 模型、表单、字段、视图等的子类化和/或混合。
  • 模板标签和/或过滤器
  • 管理命令
  • ...

这些都是您的应用程序可以其他应用程序提供功能的强大方式。 没有秘诀 (AFAIK) 可以制作可重用的应用程序,因为需要考虑很多不同的场景。 这完全取决于您的应用程序应该做什么。

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

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

并非所有东西都应该可重用

很明显,即使许多应用程序“原则上”可以重复使用,但这样做通常没什么意义,因为将事物聚集在一起(并使它们只是“一起工作”)要快得多。

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

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

我完全不明白你关于模型的问题。 没有“主”模型文件这样的东西,使用可重用应用程序的模型与使用来自您自己的任何应用程序的模型相同。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM