【问题标题】:How to access a remote datastore when running dev_appserver.py?运行 dev_appserver.py 时如何访问远程数据存储?
【发布时间】:2016-01-03 00:54:13
【问题描述】:

我正在尝试使用remote_api_stub 方法ConfigureRemoteApiForOAuth 运行具有远程API 访问远程数据存储的本地主机Web 服务器。

我一直在使用以下 Google 文档作为参考,但发现它相当稀疏:

https://cloud.google.com/appengine/docs/python/tools/remoteapi

我相信我缺少身份验证位,但找不到具体的资源来指导我。鉴于以下代码示例,在运行 dev_appserver.py 时访问远程数据存储的最简单方法是什么?

import webapp2
from google.appengine.ext import ndb
from google.appengine.ext.remote_api import remote_api_stub


class Topic(ndb.Model):
    created_by = ndb.StringProperty()
    subject = ndb.StringProperty()

    @classmethod
    def query_by_creator(cls, creator):
        return cls.query(Topic.created_by == creator)


class MainPage(webapp2.RequestHandler):
    def get(self):
        remote_api_stub.ConfigureRemoteApiForOAuth(
                '#####.appspot.com',
                '/_ah/remote_api'
        )
        topics = Topic.query_by_creator('bill')
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('<html><body>')
        self.response.out.write('<h1>TOPIC SUBJECTS:<h1>')
        for topic in topics.fetch(10):
            self.response.out.write('<h3>' + topic.subject + '<h3>')
        self.response.out.write('</body></html>')

app = webapp2.WSGIApplication([
    ('/', MainPage)
], debug=True)

【问题讨论】:

    标签: python google-app-engine


    【解决方案1】:

    这个问题被问了很多,只是因为您不能在 SDK 之外使用应用引擎库。不过,在 App Engine SDK 中也有一种更简单的方法。

    我会为此使用gcloud。设置方法如下:

    如果您想在 App Engine 环境内部或外部与谷歌云存储服务进行交互,您可以使用 Gcloud (https://googlecloudplatform.github.io/gcloud-python/stable/) 来执行此操作。

    您的应用程序需要一个服务帐户并下载 JSON 凭据文件。您可以在 authentication 选项卡下的应用程序引擎控制台上执行此操作。创建它,然后下载它。叫它client_secret.json 什么的。

    有了这些,一旦您使用 pip 为 gcloud 安装了适当的软件包,您就可以进行查询以及写入数据。

    这是一个验证自己以使用该库的示例:

    from gcloud import datastore
    
    # the location of the JSON file on your local machine
    os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "/location/client_secret.json"
    
    
    # project ID from the Developers Console
    projectID = "THE_ID_OF_YOUR_PROJECT"
    
    os.environ["GCLOUD_TESTS_PROJECT_ID"] = projectID
    os.environ["GCLOUD_TESTS_DATASET_ID"] = projectID
    client = datastore.Client(dataset_id=projectID)
    

    完成后,您可以进行如下查询:

    query = client.query(kind='Model').fetch()
    

    其实超级简单。任何人,我都会这样做!干杯。

    【讨论】:

    • 感谢您指出这一点!我一直在为 node.js 使用 gcloud,但没有意识到他们也有 python 版本。
    • @Josh 哈哈,是的。没问题!
    • @Kris 和 Josh 我正在尝试使用 gcloud 连接到远程数据存储并遵循此处发布的建议,但我遇到了我在这里描述的一些问题:stackoverflow.com/questions/39666449/… 你们中的任何一个机会知道为什么我不能让它工作吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 2015-01-18
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多