Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何授予对Python中google appengine页面的访问权限?_Python_Google App Engine - Fatal编程技术网

如何授予对Python中google appengine页面的访问权限?

如何授予对Python中google appengine页面的访问权限?,python,google-app-engine,Python,Google App Engine,我有一个简单的应用程序,提供一个页面,我希望这个页面只能被几个已经登录到谷歌的预定用户访问。事实上,我只想通过谷歌电子表格中的importHTML功能进行访问 如何以最小的麻烦实现这一点?以下是应用程序: import webapp2 class MainPage(webapp2.RequestHandler): def get(self): self.response.out.write('/Statement.htm') app = webapp2.WSGIApplicati

我有一个简单的应用程序,提供一个页面,我希望这个页面只能被几个已经登录到谷歌的预定用户访问。事实上,我只想通过谷歌电子表格中的importHTML功能进行访问

如何以最小的麻烦实现这一点?以下是应用程序:

import webapp2

class MainPage(webapp2.RequestHandler):
  def get(self):
    self.response.out.write('/Statement.htm')

app = webapp2.WSGIApplication([('/Statement.htm', MainPage)],
                              debug=True)
这是app.yaml

application: *********
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /.*
  static_files: Statement.htm
  upload: Statement.htm
我在教程中看到了这一点:

from google.appengine.api import users

class MainPage(webapp2.RequestHandler):

        user = users.get_current_user()
但这个“获取当前用户”是谁?我不需要任何登录,我只希望它是某种谷歌ID,我可以用if/else检查,如果它与一个或两个允许的名称不匹配,则提供错误页面。

将“login:admin”放入你的app.yaml,并将这些用户作为查看器添加到应用程序中。
请参阅。

您应该从您的google app engine仪表板(在管理->权限下)向他们授予管理权限,并将其添加到您的app.yaml文件中:

application: statement
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /statement
  script: statement.app
  login: admin

libraries:
- name: jinja2
  version: latest
编辑:

这是使用jinja2模板系统实现的一种方法

app.yaml文件:

application: statement
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /statement
  script: statement.app
  login: admin

libraries:
- name: jinja2
  version: latest
statement.py文件:

import webapp2
import jinja2
import os

jinja_environment = jinja2.Environment(
    loader=jinja2.FileSystemLoader(os.path.dirname(__file__)))

class Statement(webapp2.RequestHandler):
    def get(self):
        template = jinja_environment.get_template('Statement.htm')
        self.response.out.write(template.render())



app = webapp2.WSGIApplication([('/statement', Statement)],
                              debug=True)
Statement.htm文件:

您必须已被授予管理员权限。

当您转到
http://127.0.0.1:8080/statement
您必须以管理员身份登录才能到达那里。 这三个文件都在同一个目录中。如果python主文件有其他名称,则应在app.yaml文件中使用该名称和扩展名
.app

application: statement
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /statement
  script: statement.app
  login: admin

libraries:
- name: jinja2
  version: latest

script:python文件名.app

由于importHTML函数似乎不提供任何类型的授权,我只是将url处理程序更改为一个非常长的随机数字符串(实际上密码短语编码为SHA1)

在上面基于jinja的解决方案中,我在app.yaml中添加了一个处理程序,如下所示

- url: /a...................6/.*
  script: spreadsheet.app
其中,spreadsheet.app指向一个与statement.py相同的spreadsheet.py,只是webapp2调用中有一个不同的url字符串和一个新的类名

现在,通过浏览器访问的用户需要被授权为管理员,而长链接只存在于谷歌电子表格文档的一个单元格中,因此不会留在浏览器历史记录或任何地方

我希望它也不会被谷歌编入索引,也不会出现在搜索结果中


也许不是完美的解决方案,但是一个可以通过的解决办法。

这似乎没有什么效果。添加后,app.yaml如下所示:
version:1运行时:python27 api\u version:1线程安全:true处理程序:-url:/.*静态文件:Statement.htm上传:Statement.htm-url:/Statement\.htm脚本:main.app登录:admin
您搞错了。app.yaml的读取顺序为top->down,选择第一个匹配条目。您的第一个条目/*匹配所有内容。翻转这些条目。@T.Steinrücken我还没有弄清楚如何正确翻转条目,同时基于jinja2的解决方案可以工作,但只有在浏览器中,当我的谷歌电子表格试图通过Importhtl访问它时,它会得到“错误:无法检索数据。请检查URL”。如何授予谷歌电子表格管理员权限?我假设它在使用我的凭证登录谷歌时会尝试访问网络上的任何内容。我可能需要一个不同的解决方案来控制importHTML类型的访问。授予对基于google脚本的getURL的访问权限会更容易吗?我可以切换电子表格使用它。这正是我想要的,唯一的问题是我无法获得statement.py和app.yaml文件的正确组合。如果我在static_文件的处理程序部分添加login:admin,它会给我一个错误,如果我为“script:main.app”创建一个单独的处理程序,它不会改变任何东西,页面仍然会显示给任何人。如果我将其更改为“script:statement.py”,它也会抛出一个错误。