我正在尝试添加一个Saleor插件,它也是Django应用程序。原因是我希望能够使用Django迁移。我以前创建过常规的Saleor插件,效果很好。我还不太熟悉Django应用程序,但文档对我来说很有意义。我完全困惑的是这两个概念的结合。
-
它进入哪个目录?它是否像所有其他常规的saleor插件一样进入saleor/plugins目录?或者像所有其他Django应用程序一样直接进入saleor目录?我能找到的唯一相关的答案是使用
manage.py startapp
,它在根目录中创建插件,位于saleor目录旁边,这增加了我的困惑。 -
如何将Django应用程序作为Saleor插件安装?官方文件指示使用
setup.py
,并建议:如果你的插件是Django应用程序,包名(等号前的部分(将添加到Django的INSTALLED_APPS中,这样你就可以利用Django功能,如ORM集成和数据库迁移。
然而,没有一个内置的Saleor插件或Django应用程序使用这个setup.py机制,我找不到任何与Saleor相关的例子使用这个机制,如果没有这样的例子,我也无法想出任何连贯的东西(也是由于前一点(。文档似乎表明,当使用setup.py时,Django应用程序将自动添加到Django的
INSTALLED_APPS
中。还是我必须自己添加?
有人知道如何将Saleor插件创建为Django应用程序的例子吗,最好是使用工作迁移?
我不确定这是否是最好的方法,但这对我来说很有效,目前:
这个应用程序/插件可以放在任何地方,但我认为把它放在saleor/plugins
中是有意义的。
-
为插件创建一个文件夹,例如
saleor/plugins/product_import
-
运行
python3 manage.py startapp product_import saleor/plugins/product_import
。这将在您的文件夹中创建标准的Django应用程序模板。 -
我尝试了官方文档中的
setup.py
部分,但它似乎对我没有任何帮助,所以我最终忽略了它,并手动将应用程序添加到saleor/settings.py
:INSTALLED_APPS = [ ... "saleor.plugins.product_import", ... ]
这启用了Django应用程序的所有常见功能,如迁移(在
models.py
中定义一些模型后运行python3 manage.py makemigrations product_import
(、命令等。 -
要将Django应用程序变成Saleor插件(以便能够使用所有Saleor的插件挂钩(,请创建一个类似以下的
plugin.py
:from django.http import JsonResponse from django.core.handlers.wsgi import WSGIRequest from ..base_plugin import BasePlugin class ProductImportPlugin(BasePlugin): """Imports products into Saleor""" PLUGIN_NAME = "Product Import Plugin" PLUGIN_ID = "product_import" DEFAULT_ACTIVE = True PLUGIN_DESCRIPTION = ( "Imports products into Saleor." ) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def webhook(self, request: WSGIRequest, path: str, previous_value) -> JsonResponse: return JsonResponse({"status": "works"})
并将其添加到
saleor/settings.py
:中的Saleor插件列表中PLUGINS = [ ..., "saleor.plugins.product_import.plugin.ProductImportPlugin", ]