app.yaml“login:required”无效

时间:2016-05-22 18:32:35

标签: python google-app-engine

更新

这个html代码是否在模板read.html中出现了问题?这个超链接是否绕过了app.yaml的login: required

(<a href ="/edit/{{ blog_id }}/{{ r.key().id() }}">edit </a>)

更新

我的app.yaml包含多个login: required指令,但是当我在GAE本地开发时,它们似乎似乎没有停止访问。

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

handlers:
- url: /static
  static_dir: static
- url: /.*
  script: main.app

- url: /create.*
  script: main.app
  login: required

- url: /createblog.*
  script: main.app
  login: required

- url: /editblog.*
  script: main.app
  login: required

我的应用的view.py开头如下。请注意,在底部,触发了模板edit.html。但我希望只登录用户才能访问该模板。我甚至不关心未登录的用户是否有机会登录。

import os
import jinja2
import webapp2

from google.appengine.ext import db
from google.appengine.api import users

TEMPLATE_DIR = os.path.join(os.path.dirname(__file__), 'templates')
JINJA_ENVIRONMENT = jinja2.Environment(
    loader=jinja2.FileSystemLoader(TEMPLATE_DIR ),
    extensions=['jinja2.ext.autoescape'],
    autoescape=True)

class BaseHandler(webapp2.RequestHandler):

    @webapp2.cached_property
    def jinja2(self):
        return jinja2.get_jinja2(app=self.app)

    def render_template(
        self,
        filename,
        template_values,
        **template_args
        ):
    template = JINJA_ENVIRONMENT.get_template(filename)
        self.response.out.write(template.render(template_values))


class EditReminder(BaseHandler):

    def get(self, blog_id, reminder_id):
        iden = int(reminder_id)
        reminder = db.get(db.Key.from_path('Blogs',blog_id,'Reminders', iden))
    self.render_template('edit.html', {'reminder': reminder, 'blog_id': blog_id})

The answer here is informative, but ...

a)我的理解是答案是指“静态”文件,我认为这些文件不像我的模板,模板是用jinja输入的,而

b)即使我的模板是“静态”文件,我也没想出如何实现答案的建议。

那么,这些login: required怎么能起作用呢?

1 个答案:

答案 0 :(得分:5)

放置全能路线

- url: /.*
  script: main.app

在底部。