【问题标题】:How is Shop class supposed to be access in line 60 of shopify.Session in the shop methodShop 类应该如何在 shop 方法中 shopify.Session 的第 60 行访问
【发布时间】:2026-01-11 08:05:01
【问题描述】:

我正在尝试将 python shopify api 与 OAuth2 一起使用并通过 api 工作,并且 我正在尝试将 django auth 示例移至 oauth 而不是 legacy(并且不使用 django,我只是针对 appengine 上的 webapp2 来获取一个更简单的示例。;-)

我遇到了一个问题,在我的处理程序中调用了会话 shopify_session.shop() 后,我收到了 NameError:“未定义全局名称 'Shop'”。

查看当前代码,此方法的实现是(第 59 行)

def shop(self):
    Shop.current()

但我看不出类 Shop 是如何访问的。 Shop 类在 resources.py 中定义,并且不会在 session.py 中的任何位置导入。这是 api 代码中的错误,还是应该进行一些魔术或其他类型的设置运行以将该类注入会话模块。

【问题讨论】:

    标签: python shopify


    【解决方案1】:

    糟糕,该方法从 ruby​​ shopify_api 库中移植不正确。我决定完全删除它,因为它已经坏了,因此没有应用程序必须依赖它工作,即使在 ruby​​ 库中它也没有真正使用会话实例。唯一有意义的方法是它暂时激活会话然后检索当前商店。

    shopify_django_app 示例应用现已更新为支持 Oauth2,但仍需要更新 App Engine 上 django 的说明和 zip 文件。

    【讨论】:

      【解决方案2】:

      对我来说似乎是一个错误。不仅缺少导入,而且此方法不返回任何内容这一事实。 FWIW,如果有任何“魔法”(快速浏览源代码后我没能发现),那么它是 very unpythonic。

      【讨论】:

      • 并且代码实际上是在 django 示例中使用的,但我认为它从未被执行过。尝试完成 shopify 应用程序注册过程一直让我头疼。迄今为止我发现的所有代码示例都使用旧版 Auth。我不再使用该代码,但这让我想知道还有什么潜伏着。我一点也不熟悉 pyactiveresource 和 activeresource 似乎在 ruby​​ 领域做魔法,所以想知道它是否也在这里做了奇怪的魔法。
      • 我还注意到 request_token 方法中 session.py 中的第 88 行正在使用客户端秘密令牌作为 URL 的路径而不是作为 POST 参数来构建 POST url,因此客户端令牌被明确传递在请求中。这似乎是一个问题;-)
      • 这段代码看起来不太好。似乎 session.py 的第 88 行不应该对 URL 中的 client_id、client_secret 和代码进行编码,而是应该在对 response = connection.post(access_token_path, ShopifyResource.headers) 的调用中将第 90 行中的数据传递给
      • 嗯,这是讨论 shopify-python-api 内部结构的正确地方吗?目前看来,它似乎存在问题
      • 库在发送 client_secret 时遵循OAuth2 authentication 的第 2 步。它不是以纯文本形式发送的,因为使用了 https,并且向 Shopify 发出请求,而 Shopify 已经知道 client_secret。 shop_url 是从 Shopify 重定向的参数中提供的,并且使用构造函数中使用的 validate_params 方法验证参数是否来自 Shopify。