0

我正在尝试添加一个也是 Django 应用程序的 Saleor 插件。原因是我希望能够使用 Django 迁移。我以前创建过常规的 Saleor 插件,效果很好。我对 Django 应用程序还不是很熟悉,但文档对我来说很有意义。我完全困惑的是这两个概念的结合。

  • 它进入哪个目录?它是否像所有其他常规 Saleor 插件一样进入 saleor/plugins 目录?还是像所有其他 Django 应用程序一样直接进入 saleor 目录?我能找到的唯一有点相关的答案建议使用manage.py startapp,它在根目录中创建插件,在 saleor 目录旁边,增加了我的困惑。

  • 如何将 Django 应用程序安装为 Saleor 插件?官方文档指示使用 asetup.py并建议:

    如果您的插件是 Django 应用程序,则包名称(等号之前的部分)将添加到 Django 的 INSTALLED_APPS 中,以便您可以利用 Django 的功能,例如 ORM 集成和数据库迁移。

    但是,内置的 Saleor 插件或 Django 应用程序都没有使用这个 setup.py 机制,我找不到任何与 Saleor 相关的例子,如果没有这样的例子,我也无法想出任何连贯的东西(也是由于前一点)。该文档似乎表明,当使用 setup.py 时,Django 应用程序将自动添加到 Django 的INSTALLED_APPS. 还是我必须自己添加它?

有谁知道如何将 Saleor 插件创建为 Django 应用程序的示例,最好使用工作迁移?

4

1 回答 1

0

我不确定这是不是最好的方法,但这对我有用,现在:

该应用程序/插件可以存在于任何地方,但我认为将其放入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 应用程序功能,例如迁移(python3 manage.py makemigrations product_import在定义一些模型后运行models.py)、命令等。

  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 插件列表中saleor/settings.py

    PLUGINS = [
      ...,
      "saleor.plugins.product_import.plugin.ProductImportPlugin",
    ]
    
于 2021-05-19T02:01:43.103 回答