如何创建一个作为Django应用程序的Saleor插件



我正在尝试添加一个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中是有意义的。

  1. 为插件创建一个文件夹,例如saleor/plugins/product_import

  2. 运行python3 manage.py startapp product_import saleor/plugins/product_import。这将在您的文件夹中创建标准的Django应用程序模板。

  3. 我尝试了官方文档中的setup.py部分,但它似乎对我没有任何帮助,所以我最终忽略了它,并手动将应用程序添加到saleor/settings.py:

    INSTALLED_APPS = [
    ...
    "saleor.plugins.product_import",
    ...
    ]
    

    这启用了Django应用程序的所有常见功能,如迁移(在models.py中定义一些模型后运行python3 manage.py makemigrations product_import(、命令等。

  4. 要将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",
    ]
    

相关内容

最新更新