如何在运行dev_appserver.py时访问远程数据存储区?

时间:2016-01-03 00:54:13

标签: python google-app-engine

我尝试使用remote_api_stub方法ConfigureRemoteApiForOAuth运行对远程数据存储具有远程api访问权限的localhost 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)

1 个答案:

答案 0 :(得分:5)

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

我会使用gcloud。以下是设置方法:

如果您想与App Engine环境内外的Google云存储服务进行互动,您可以使用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()

实际上非常容易。任何人,那就是我怎么做的!欢呼声。