【问题标题】:Sharing objects between applications在应用程序之间共享对象
【发布时间】:2013-07-02 14:30:07
【问题描述】:

我正在尝试在两个 GAE 应用程序之间共享一个对象。第一个将拥有类的文件,并提供该对象的一个​​实例。第二个,使用给定的 url,将访问第一个应用程序,获取对象,然后使用 is。这真的可能吗?如果是这样,我在下面的代码中做错了什么?

作为一个小旁注,我尝试了一个使用 pickle 的解决方案,但是这两个应用程序都需要在其名称空间中包含该类,但我将使用其中的一些。我曾想过尝试通过使用继承来模仿 Java 的抽象类之类的东西,但没有成功。如果你想看,我也可以提供该代码。

  • 我了解可能的服务条款,这不是问题。

  • 我知道云计算已经存在,但我不知道如何使用它,但我会 宁愿避免成本,因为我将其作为一个班级项目进行开发。

  • 我看到了一些使用remote_api的建议,但是我没有看到好的例子 如何使用它,更不用说用于允许两个应用程序交互了。

  • 我见过使用多个版本的解决方案,但是每个学生都会有 一个应用程序,它会非常混乱,但可能是可行的。

First.Py:

class SampleCritter():
    def move():
        ...
class Access(webapp2.RequestHandler):
    def post(self):
        CritStore(stats=self.request.body).put()

    def get(self):
        creature = CritStore.all().order('-date').get()
        if creature:
            stats = loads(creature.stats)
            return SampleCritter(stats)
        else:
            return SampleCritter() 

Second.py:

class Out(webapp2.RequestHandler):

    def post(self):
        url = self.request.POST['url']
        critter = urllib2.urlopen(url)
        critter.move()

【问题讨论】:

    标签: python google-app-engine google-cloud-datastore


    【解决方案1】:

    简短的回答是,您不能在应用之间共享对象。

    更长的答案是,您的第一个应用可以使用基于 HTTP 的 API 公开对象。任何客户端都可以访问 HTTP API,包括应用 2。

    App 2 必须通过 HTTP API 操作对象。您将无法从应用程序 2 调用 critter.move(),但如果您创建一个处理程序,例如 critter\move,您可以让该处理程序提取适当的 Critter 实例并在其上调用 move()。您还必须通过 HTTP POST 传递所有适当的参数。

    【讨论】:

    • 很抱歉,我对这个不太了解,你所说的“创建一个处理程序,比如 critter\move”等等是什么意思?
    • 创建请求处理程序是 App Engine 中的基本内容。创建多个应用程序将是您的主要分心。专注于如何让单个应用首先运行。
    • 我很抱歉,但我不确定我是否遵循。您是说将小动物变成应用程序,以便应用程序中的每个页面都是一个功能。例如 critter.com 可能会返回一些值。 Critter.com/move 将一些如何返回移动功能。是这个意思吗?
    • “使用基于 HTTP 的 API 公开对象”是什么意思?我对 HTTP 的工作很少,您知道有一个很好的资源可以解释如何将 HTTP 与 python 结合使用吗?
    • 这一切都非常简单明了。你只是在想象有一些神奇的仙尘可以让一切自动运行。没有。 HTTP 请求不能返回 python 函数。您必须手动编写一个 http 请求处理程序(您已经编写了一些请求处理程序),这样当访问 url 时,处理程序代码将获取适当的 critter 实例,然后调用 move()。可以传入参数并返回结果,但不能传递python对象。
    猜你喜欢
    • 2015-04-04
    • 2013-05-02
    • 2011-03-15
    • 2010-11-06
    • 1970-01-01
    • 2010-12-10
    • 2012-12-04
    • 2012-07-22
    相关资源
    最近更新 更多