【发布时间】:2014-03-15 17:34:08
【问题描述】:
这个问题困扰了我好几天,我也试过在很多地方寻求建议,但似乎没有人能清楚地回答它,甚至没有提供答案的参考。
我也尝试过搜索教程,但我找不到任何类型的教程来解释如何使用可重用的第三方 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/')
虽然上面的代码很简单,但是对于任何可重用的应用程序来说,基本上都是这样吗?
我的问题很长,但我认为这个可重用应用程序问题是很多开发人员对自己不太清楚的问题,也许这个答案会帮助很多其他听说过可重用应用程序承诺的人,但不明白如何实际使用它们。
【问题讨论】:
-
你做到了吗?你想和我们分享一下吗。。我也有同样的情况
-
我建议您尝试像使用函数一样使用它。例如。如果您正在使用函数 X(var1, var2),则在 mainapp.py 中导入模块/库,然后通过基本上传递您要传递的变量并让函数执行它来使用 X(var1, var2) (并且可能返回一些东西)。我想我最终从抽象的角度看到了它,其中代码“写在其他地方”,而您正在使用主文件中“其他地方”的函数等,而无需再次重写所有相同的功能。跨度>
标签: python django code-reuse reusability django-apps