gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:50:49 26 4
gpt4 key购买 nike

这个问题困扰我好几天了,我试过很多地方请教,但似乎没有人能清楚地回答这个问题,甚至没有人提供答案的引用。

我也试过搜索教程,但我找不到任何类型的教程来解释如何使用可重用的第三方 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 个可重用应用程序中的东西集成到 main 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/')

虽然上面的代码很简单,但是任何可重用应用程序基本上都是这样做的吗?

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

最佳答案

长话短说:

不,这取决于...

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

...这些都是可重用的 Django 应用程序,它们恰好随 Django 一起提供(其中大部分不是,在某个时间点)

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

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

他们是怎么做到的?

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

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

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

这些都是您的应用可以向其他应用提供功能的强大方式。制作可重用应用程序没有秘诀(据我所知),因为需要考虑的场景太多了。这完全取决于您的应用程序究竟应该做什么。

可重复使用的应用提供功能

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

不是所有的东西都应该是可重用的

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

关于python - 您实际上如何在项目中使用可重用的 Django 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21811851/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com