跳转到主要内容

Plone的商店解决方案

项目描述

Plone的电子商务解决方案

https://github.com/bluedynamics/bda.plone.shop/actions/workflows/main.yml/badge.svg https://black.pythonlang.cn/en/stable/_static/pypi.svg

安装

根据您的实例依赖bda.plone.shop,并在Plone控制面板中将其安装为插件。

开发和测试

git://github.com/bluedynamics/bda.plone.shop.git检出bda.plone.shop并运行

~$ make install

这将使用mxdev安装所有依赖项,并为运行测试准备脚本。

运行测试

如果您已运行buildout,您可以像这样运行所有测试

~$ make test-ignore-warnings

要运行机器人测试,请这样做

./venv/bin/zope-testrunner --auto-color --auto-progress --test-path=./src --all

对于开发,启动测试服务器并单独运行机器人测试可能更方便,如下所示(-d以在DEBUG模式下启动Zope)

./venv/bin/robot-server bda.plone.shop.tests.ShopDXFull_ROBOT_TESTING -d
./venv/bin/robot src/bda/plone/shop/tests/robot/test_shop_orderprocess.robot

要使测试失败时自动进入调试shell,请使用

./venv/bin/robot-debug src/bda/plone/shop/tests/robot/test_shop_orderprocess.robot

在机器人测试中,您可以放置调试语句以访问机器人shell来尝试事物。

有关此主题的更多信息,请访问:https://docs.plone.org/external/plone.app.robotframework/docs/source/happy.html

启用内容可购买

表示可购买项目的文本内容必须实现 bda.plone.orders.interfaces.IBuyable 接口。

与可购买项目相关的信息通过实现以下接口的适配器从内容实例中获取

- ``bda.plone.cart.interfaces.ICartItemDataProvider``
- ``bda.plone.cart.interfaces.ICartItemStock``
- ``bda.plone.shipping.interfaces.IShippingItem``
- ``bda.plone.orders.interfaces.IItemNotificationText``
- ``bda.plone.orders.interfaces.IGlobalNotificationText``
- ``bda.plone.orders.interfaces.ITrading``
- ``bda.plone.orders.interfaces.IBuyablePeriod``

这些适配器以及相关的Dexterity行为中存在实现。

对于Plone 5,文件夹和集合的“摘要视图”被覆盖,以显示您的可购买项目,并带有将它们添加到购物车的控件。

Dexterity

与Dexterity相关的实现包括为每个接口创建行为。这些是(括号内为简称)

  • bda.plone.shop.dx.IBuyableBehavior (bda.shop.buyable)

  • bda.plone.shop.dx.IStockBehavior (bda.shop.stock)

  • bda.plone.shop.dx.IShippingBehavior (bda.shop.shipping)

  • bda.plone.shop.dx.IItemNotificationTextBehavior (bda.shop.notificationtext.item)

  • bda.plone.shop.dx.IGlobalNotificationTextBehavior (bda.shop.notificationtext.global)

  • bda.plone.shop.dx.ITradingBehavior (bda.shop.trading)

  • bda.plone.shop.dx.IBuyablePeriodBehavior (bda.shop.buyableperiod)

为引用的行为接口注册相应的适配器实现。

IBuyable 接口通过 IBuyableBehavior 在内容上进行挂钩。

为了使用dexterity创建可购买项目,您需要通过GenericSetup创建一个门户类型,或者使用Dexterity TTW编辑器将行为分配给现有内容,或者从头开始创建新的类型TTW。

与通知相关的行为可以应用于任何Dexterity对象,包括可购买项目,通知文本值直到达到Plone根。

购物车项目预览图像

如果上下文有一个名为 image 的字段,购物车可以为购物车中的项目渲染预览图像。

您可以通过适配自己的购物车项目来更改预览图像的渲染。如果您想更改图像的缩放比例,从现有的适配器类继承并更改 preview_scale 属性

>>> from bda.plone.shop.dx import DXCartItemPreviewImage
>>> class MyDXCartItemPreviewImage(DXCartItemPreviewImage):
...     preview_scale = "my_scale"

为了执行更复杂的预览图像渲染,您可以覆盖 url 属性

>>> class MyDXCartItemPreviewImage(DXCartItemPreviewImage):
...     @property
...     def url(self):
...         # do sophisticated stuff to get your preview image
...         return preview_url

通过ZCML注册您的适配器

<adapter
  for="some.package.IMyDXContent"
  factory=".youradater.MyDXCartItemPreviewImage" />

权限

通常,定制的商店部署可能会根据其用例配置权限和角色设置。

存在 bda.plone.shop.ViewBuyableInfobda.plone.shop.ModifyCart 权限,以控制哪些部分的可购买数据和控件被暴露给用户。

此外,权限 bda.plone.shop.ChangePersonalInformationbda.plone.shop.ChangePersonalPreferences 用于控制对个人偏好和个人信息页面的访问。默认情况下,具有 Customer 角色的用户只能访问个人信息,因为这通常没有意义给予客户如首选编辑器的设置。

bda.plone.shop.ViewBuyableInfo

此权限控制用户是否可以查看基本的可购买信息。这些是项目可用性和项目价格。默认情况下,此权限设置为以下角色

  • 经理

  • 网站管理员

  • 审阅者

  • 编辑器

  • 客户

  • 认证的

此权限还授予认证的角色,以涵盖认证用户应看到价格信息,但不能购买商品的情况。

为了默认情况下将可购买信息暴露给所有访客,请通过集成包的 rolemap.xml 在通用设置中添加 Anonymous 角色。

bda.plone.shop.ModifyCart

此权限控制用户是否实际上可以将此项目添加到购物车或更新它。默认情况下,此权限设置为以下角色

  • 经理

  • 网站管理员

  • 客户

为了让非客户或匿名用户能够修改购物车,请根据需要编辑您集成包中的 rolemap.xml 文件。请注意,商店基本上是设计为匿名用户可以购买物品,但与查看订单等订单相关功能绑定到 Customer 角色。

定制商店

我们知道每个网店都有不同的需求。这就是为什么 bda.plone.shop 旨在具有最大的灵活性。

一般来说,bda.plone.shop 通过更改控制面板中的设置(总是增长的)或修补变量/类来定制。

集成商可能希望在 Zope2 包的 initialize 方法中添加一个 patchShop 方法

def initialize(context):
    """Initializer called when used as a Zope 2 product.
    """
    patchShop()

……并确保在启动时使用 zcml 调用它

<configure
  xmlns="http://namespaces.zope.org/zope"
  xmlns:five="http://namespaces.zope.org/five">

  <five:registerPackage package="." initialize=".initialize" />

</configure>

patchShop 中,通常从 bda.plone.shop 相关包导入常量并重新定义它们。

def patchShop():
    from bda.plone import cart
    cart.CURRENCY_LITERALS['EUR'] = u'€'

请参阅 bda.plone.checkoutbda.plone.order 了解如何分别定制结账表单或通知电子邮件。

故障排除

如果您在 @@item_discount 表单中缺少小部件(例如,用户或组的自动完成),您可能需要重新安装(或重新运行 GS 导入步骤)yafowil.plone(有关更多信息,请参阅其 README)。

如果自动完成小部件(在 @@item_discount 中)不起作用,您可以在 portal_javascripts 中禁用 ++resource++yafowil.widget.autocomplete/jquery-ui-1.8.18.autocomplete.min.js

如果您在表单方面遇到问题,请检查您是否安装了 yafowil >= 2.1 以及相关的 yafowil 包。

创建翻译

$ cd src/bda/plone/shop/
$ ./i18n.sh

向后不兼容的更改

1.0a1

  • bda.plone.shop: Buy Items 权限已被重命名为 bda.plone.shop: Modify Cart。如果您在您的 GS 配置文件中使用了此权限或您在代码中某处使用了此权限,您需要更新您的自定义设置。

升级到 Plone 5

如果您升级到 Plone 5,您必须手动运行升级步骤 Remove old JS and CSS resources for Plone 5 以删除旧的资源注册。

贡献者

我们很高兴看到对这个程序的分支和 pull-requests。维护者和一些作者提供专业支持。

维护者

  • Robert Niederreiter

  • Peter Holzer

  • Jens Klein

联系方式: dev@bluedynamics.com

作者

  • Robert Niederreiter(初始作者)

  • Peter Holzer

  • Peter Mathis

  • Harald Frießnegger

  • Espen Moe-Nilssen

  • Johannes Raggam

  • Jure Cerjak

  • Benjamin Stefaner

  • Jens Klein

变更日志

2.0b1 (2024-04-17)

  • 引入 bda.plone.shop.cartdata.CHECKOUT_INTERMEDIATE_VIEW。[rnix]

  • 删除与 Archetypes 相关的文档。[rnix]

  • 使用 BooleanIndex 进行物品可购买性并添加元数据。[agitator]

  • 使用 Decimal 作为运费和文章的默认值。[agitator]

  • 修复可用性详细信息弹出窗口。[petri]

  • 重构 buyable.[py|pt],以提供本地化数字输出和更好的 Decimal 使用。同时使用 Python 表达式以提高性能。[jensens]

  • 使用 Decimal 字段表示净价,并在访问器中将旧值转换为 Decimal。[jensens]

  • 提供有关是否启用了评论的信息。[jensens]

  • 考虑可购买期限以确定可用性信号。[jensens]

  • 根据是否启用了评论对可购买 dl 进行标记,以简化样式。[jensens]

  • 为计数提供本地化数字输入。[jensens]

  • 不再支持 z3c.autoinclude。[jensens]

  • 添加更多可用单位。[jensens]

  • 使发票字段可选。[agitator]

  • 代码风格 black。[jensens]

  • 修复最新购物车/配送更改的导入。[jensens]

  • Python 2/3 兼容性。[agitator]

  • 更新版本和分类器 - 2.x 针对 Plone 5.1/5.2 而不使用 Archetypes。[agitator]

  • 意大利翻译。[ale-rt]

  • 迁移:修复了升级旧商店安装时的边缘情况。[petschki]

1.0a1(未发布)

  • 用 unittest 替换 unittest2。[llisa123]

  • 使用 userschema.xml 扩展 Plone 5 的商店特定用户数据。[agitator]

  • 添加发票设置。[rnix]

  • 为 plone 5 中的商店设置进行一些 CSS 修复。[rnix]

  • 修复由于启动时未初始化注册表而导致 Plone 中 bin/instance adduser 失败的问题。修复:#100。[thet]

  • item_netitem_buyable_startitem_buyable_end 添加元数据列。这样,它们可以显示在集合结果的表格视图中。[thet]

  • 隐藏空工具栏类别。[agitator]

  • 在购物车项数据中提供折扣。[rnix]

  • bda.plone.shop: Buy Items 权限重命名为 bda.plone.shop: Modify Cart。[rnix]

  • 通过覆盖 plone.app.contentypes 添加 buyable_controls 到 summary_view。[agitator]

  • 在配送计算中使用 ICartDataProvider 适配器查找,而不是直接使用 CartItemCalculator,以确保可能的自定义实现生效。[rnix]

  • 弃用 bda.plone.shop.cartdata.CartItemCalculator 的使用。[rnix]

  • 修复如果购物车 cookie 中的项目未找到的错误。[rnix]

  • 根据商店设置修复基于商店的可购买视图中的货币显示。[agitator]

  • 为 AT 和 DX 实现 IShippingItem.free_shipping。在 DefaultShipping 中考虑此标志与项目配送成本。[rnix]

  • 在 Plone 5 中安装时不要添加商店管理端口配置。[rnix]

  • 实现 Plone 5 工具栏的商店导航菜单。[rnix]

  • 将商店端口相关链接实现移至 bda.plone.shop.browser.navigation。[rnix]

  • 在德语中使用 MwSt. 而不是 Ust.。[agitator]

  • 重构代码:使用 plone.api 和 zca 装饰器。[jensens]

  • 修复:如果管理员电子邮件或名称尚未设置,则不要引发 AttributeError。[jensens]

  • default_item_stock_warning_threshold 设置添加升级步骤。[thet]

  • 为来自 bda.plone.ordersdefault_item_minimum_stock 属性添加 default_item_stock_warning_threshold 设置。[andreesg]

  • 行为注册:删除多余的‘for’并给行为简短的名字。[jensens]

  • 添加一个用于计算用户属性的 PlonePAS 插件。[pcdummy]

  • Plone 5 更新,使用单独的 styles/less。[agitator]

  • 商店端口:对于订单和预订视图,也使用适当的上下文(供应商、站点或 Plone 站点根)。[thet]

  • 商店端口:对于“上下文中的订单”,使用适当的上下文,就像“上下文中的预订”所做的那样。避免在默认页面上调用此视图。[thet]

  • 商店端口:添加商店控制面板管理链接,链接到 ISite 或 IPloneSiteRoot。如果 lineage.registry 已安装,则也可以在子站点级别设置商店设置。[thet]

  • 始终在商店端口中显示邮件模板链接,但链接到正确的上下文。将 i18n 消息重命名为反映上下文是在 IVendor 对象(供应商)、ISite(站点范围)或 IPloneSiteRoot(全局)上。[thet]

  • 解决 JSHint 错误和警告。[thet]

  • 修复:buyable_period 比给定时间晚了一分钟开始。[jensens]

  • 将 AT 和 DX zcml 注册分开到自己的文件中,以获得更好的概览。[thet]

  • 禁用已弃用的 FlatRate 配送适配器。[jensens]

  • 更改 IBuyable 的导入到 bda.plone.orders - 摆脱弃用消息。[jensens]

  • 在管理员端口中添加了两个视图,用于显示预订信息,并可以按购买者的电子邮件地址或可购买项的uid进行分组。两个视图都支持日期范围过滤和文本索引支持。《预订》视图在门户网站根目录下调用,而《预订上下文》返回调用相应上下文的所有预订数据。[benniboy]

  • 将IBuyable移动到bda.plone.orders以避免循环依赖。[benniboy]

  • 在可用性详细信息中考虑可购买项的有效期和过期日期,并显示适当的消息。[rnix]

  • 将userdata适配器更改为命名适配器,以便其他适配器可以扩展功能。[thet]

  • 将default_item_cart_count_limit添加到控制面板默认值中。别忘了运行更新步骤。[agitator]

  • 通过可购买视图组件修改购物车数据时显示状态消息。[rnix]

  • 添加瑞士增值税税率。[rnix]

  • 在Plone网站根目录中不显示“导出此项目的订单”。[jensens]

  • 在启用或禁用可购买或供应商功能时,使用Products.statusmessages显示门户网站状态消息。[thet]

0.9

  • 添加“现金和提货”运输方式。[rnix]

  • 要在上下文(如供应商区域)上启用和禁用功能,不要使用directlyProvides并删除所有其他直接提供的接口,而应使用alsoProvides。这是在集体.lineage网站上激活供应商区域后使其工作所需的。[thet]

0.8

  • 使用bda.plone.orders.ViewOwnOrders权限保护portlets.ShopAdmin端口号中的@@myorders链接。[thet]

  • 从用户信息中删除“接受条款和条件”标志的验证约束。验证仅在结账时适用。[rnix]

  • 如果IPaymentTextSettings.cash_on_delivery_costs尚未存在,则不要在CashOnDeliverySettings.costs中失败。[rnix]

  • 引入bda.plone.shop.utils.format_amount。[rnix]

  • 添加IPaymentTextSettings.cash_on_delivery_costs设置。[rnix]

  • cash_in_advancecash_on_delivery值添加到IPaymentTextSettings.available_payment_methods。[rnix]

  • 在默认运输消息中格式化货币值。[rnix]

0.7

  • 如果用户没有可用的商店链接,则完全跳过商店端口号。[rnix]

  • ShopPortletExportOrdersLinkShopPortletExportOrdersItemLink中检查bda.plone.orders.ExportOrders权限。[rnix]

  • dashboard用户操作绑定到bda.plone.shop.ChangePersonalPreferences权限。[rnix]

  • 格式化actions.xml以使动作翻译正常工作。需要GS Profile应用程序。[rnix]

  • 引入IShopSettings.add_customer_role_to_new_users,并将其考虑为基本创建事件订阅者。[rnix]

  • 引入“个人信息”用户操作,并采用“个人偏好”用户操作,以便仅对授权用户显示。[rnix]

  • 引入bda.plone.shop.ChangePersonalInformationbda.plone.shop.ChangePersonalPreferences权限,并将personal-preferencespersonal-information视图绑定到商店层和这些权限。[rnix]

  • 检查存储在cookie中的运输方法是否可用(是否仍然可用)。[rnix]

  • 为DX和AT实现bda.plone.orders.interfaces.ITrading。[rnix]

  • mailnotify.RegistryPaymentText注册为zope.component.interfaces.ISite而不是Products.CMFCore.interfaces.ISiteRoot。[rnix]

  • CheckoutSettings.skip_payment中检查订单总价值而不是支付方式。[rnix]

  • 添加cartdata.CartDataProvider.max_artice_count。[rnix]

  • 删除cartdata.CartDataProvider.include_shipping_costs,因为它现在已在基类中实现。[rnix]

  • 删除 IShopShippingSettings.include_shipping_costs,标志现在从 IShippingItem.shippable 计算得出。注意 - 不要忘记运行 GS 升级步骤 4 到 5,并在必要时更新集成包 SG 配置。[rnix]

  • 引入 IShopShippingSettings.default_shipping_item_shippable 并将其用作 IShippingItem.shippable 的默认值。[rnix]

  • 实现 bda.plone.shipping.interfaces.IShippingItem.shippable 并在适当的位置考虑。[rnix]

  • bda.plone.shop.checkout.CheckoutSettings 中实现 bda.plone.checkout.interfaces.ICheckoutSettings。[rnix]

  • bda.plone.shop.shipping.ShippingSettings 中使用 bda.plone.shop.interfaces.IShopShippingSettings 控制面板设置实现 bda.plone.shipping.interfaces.IShippingSettings。[rnix]

  • bda.plone.shop.payment.PaymentSettings 中实现 bda.plone.payment.interfaces.IPaymentSettings,并使用 bda.plone.shop.interfaces.IPaymentTextSettings 控制面板设置。[rnix]

  • available_payment_methodspayment_methodskip_payment_if_order_contains_reservations 添加到 bda.plone.shop.interfaces.IPaymentTextSettings 并提供 GS 升级步骤。[rnix]

  • bda.plone.shop.vocabularies.PaymentVocabulary 重命名为 bda.plone.shop.vocabularies.PaymentMethodsVocabulary。[rnix]

  • bda.plone.shop.mailnotify.RegistryPaymentText 中实现 bda.plone.orders.interfaces.IPaymentText。[rnix]

  • @@exportorders_contextual 添加管理员面板链接以导出此项目的订单。[thet]

  • bda.plone.shop.mailnotify 中实现 bda.plone.orders.interfaces.INotificationSettings。[rnix]

  • bda.plone.shop.notificationtext 重命名为 bda.plone.shop.mailnotify。[rnix]

  • Shop Admin Name 添加到控制面板设置。[fRiSi]

  • 如果存在,则在购物车数据提供者中考虑来自 cookie 的配送方法。[rnix]

  • 通过 item_netitem_vatitem_weight 函数扩展 CartItemCalculator。[rnix]

  • 添加 DefaultShipping 及相应的控制面板设置。必须应用 GS 升级 2_to_3。[rnix]

  • 弃用 FlatRate 配送方式。[rnix]

  • 将配送实现适配到 bda.plone.shipping >= 0.4。[rnix]

  • 修复显示折扣价格。如果原始价格不同于折扣价格,则仅显示原始价格。[rnix]

  • 添加自定义化和安装文档。[fRiSi]

0.6

  • 如果商品适用折扣,则在可购买控件中显示原始价格和折扣价格。[rnix]

  • 允许通过 ICartItemDataProvider 访问器获取购物车项目标题,以允许自定义化。这可以用于在另一个内容项内提供更多上下文,例如,对于在另一个内容项内的可购买项。[thet]

0.5

  • 引入 IBuyablePeriod 接口,为 AT 和 DX 实现,并在可购买控件和购物车验证中包含检查。[rnix]

  • 在购物车数据提供者中实现 validate_set。[rnix]

  • 将浏览器视图和适配器注册从 IPloneSiteRoot 更改为 zope.component.interfaces.ISite。这是为了与 Lineage 兼容。[thet]

  • 集成购物车项目数据接口的 cart_count_limit 属性。[rnix]

  • 集成购物车数据接口的 hide_cart_if_empty 属性。[rnix]

  • 实现库存接口的 display 属性,并在可购买控件中考虑它。[rnix]

  • 修改了可购买控件模板的标记和样式,该模板用于购买视图。 [thet]

  • 为 buyable_controls 添加了 show_available 属性。当设置为 True(默认值)时,会显示每个可购买项的可用信息。对于共享库存的可购买项,可以在自定义的可购买类中关闭此功能。 [thet]

  • 移除了 buyable viewlet 类,因为它没有进行任何自定义。这不应该破坏向后兼容性。 [thet]

  • 直接使用 AccessControl 检查可购买控件的权限。由 plone.api.user.get_current() 返回的 <SpecialUser 'Anonymous User'> 实例不提供 checkPermission 函数,这使得它无用。

  • 引入了 bda.plone.shop.ViewBuyableInfobda.plone.shop.BuyItems 权限,并考虑在可购买控件中。现在可以控制用户是否可以看到物品定价以及他们是否可以购买物品。 [rnix]

  • 不要为 bda.plone.shop.buyable 视图小部件注册 IBelowContentBody,而只注册 IAboveContentBody,以避免重复显示。如果集成商希望在别处显示视图小部件,则应不同方式注册。 [thet]

  • 集成与折扣相关的功能。 [rnix]

  • bda.plone.shop.browser.actions.VendorAction 中为 Site AdministratorManager 角色设置了 bda.plone.orders.permissions.DelegateVendorRole 权限。 [rnix]

  • 重构商店面板,并引入 bda.plone.shop.browser.admin.IShopPortletLink,它可以用于将链接连接到商店面板。 [rnix, thet]

  • 实现 bda.plone.orders.IPaymentText。 [rnix, jensens]

  • 实现 bda.plone.orders.I[Item|Global]NotificationText。 [rnix, jensens]

  • 允许门户网站成员存储账单和配送地址信息,并在结账过程中使用这些信息作为默认值。 [thet]

  • 修复 BrowserLayer 排序优先级。 [thet]

0.4

  • 弃用 bda.plone.shop.extenderbda.plone.shop.behaviors。 [rnix]

  • 通过列出已注册的适配器来获取可用的配送方法。 [fRiSi]

  • 在计算重量时考虑数量。 [fRiSi]

0.3

  • bda.plone.shop.cartdata.CartItemCalculator 中添加重量计算。 [rnix]

  • 如果已定义,则在可用性详细信息中显示 delivery_duration。 [rnix]

  • CartItemAvailability 实现中考虑 quantity_unit_float。 [rnix]

  • 为 Dexterity 和 Archetypes 实现 bda.plone.shipping.IShippingItem。 [rnix]

  • 添加控制面板图标。 [rnix]

  • 为浏览器资源设置浏览器层。 [rnix]

0.2

  • 词汇表和控制面板改进。 [rnix]

  • 控制面板现在以几个字段集的形式显示。 [hpeter]

  • 通过拆分成几个配置界面来重构控制面板。 [hpeter]

  • 添加控制面板。 [espenmn]

  • 通过库存相关接口扩展 AT 和 DX 实现。 [rnix]

  • 为 Dexterity 和 Archetypes 实现购物车合同。 [rnix]

  • 不再默认在所有架构体对象上设置 bda.plone.shop.interfaces.IPotentiallyBuyable。必须在集成包中完成。 [rnix]

  • 为购物车项预览图像添加适配器。 [petschki]

  • 允许在左侧列中也显示商店管理面板。(修复 #2) [fRiSi]

0.1

  • 初始工作 [rnix]

许可证

版权所有 (c) 2012-2023,BlueDynamics Alliance,奥地利。保留所有权利。

允许在满足以下条件的情况下重新分发和使用源代码和二进制形式,无论是否修改:

  • 源代码重新分发必须保留上述版权声明、本条件列表和以下免责声明。

  • 二进制形式的再分发必须复制上述版权声明、本条件列表以及以下免责声明在提供的文档和其他材料中。

  • 未经特定事先书面许可,不得使用BlueDynamics Alliance的名称或其贡献者的名称来批准或推广由此软件派生出的产品。

本软件由BlueDynamics Alliance提供,“现状”提供,并且任何明示或暗示的保证,包括但不限于适销性和针对特定目的的适用性保证均被排除。在任何情况下,BlueDynamics Alliance均不对任何直接、间接、偶然、特殊、示范性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务的中断)承担责任,无论损害是由何种原因造成的,也不论是根据何种责任理论,即使是被告知了此类损害的可能性。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

bda.plone.shop-2.0b1.tar.gz (135.0 kB 查看哈希值)

上传时间

构建分发

bda.plone.shop-2.0b1-py3-none-any.whl (154.3 kB 查看哈希值)

上传时间 Python 3

支持者