よしこれは私が持っているどのようなものです:Pythonの管理者のみデコレータ
私はスコッチでauthengineで遊んだし、管理者のデコレータを作成する方法を見つけ出すことはできません。相続人は、そのかなり単純コード:
class Jinja2Handler(webapp2.RequestHandler):
"""
BaseHandler for all requests all other handlers will
extend this handler
"""
@webapp2.cached_property
def jinja2(self):
return jinja2.get_jinja2(app=self.app)
def get_messages(self, key='_messages'):
try:
return self.request.session.data.pop(key)
except KeyError:
return None
def render_template(self, template_name, template_values={}):
messages = self.get_messages()
if messages:
template_values.update({'messages': messages})
self.response.write(self.jinja2.render_template(
template_name, **template_values))
def render_string(self, template_string, template_values={}):
self.response.write(self.jinja2.environment.from_string(
template_string).render(**template_values))
def json_response(self, json):
self.response.headers.add_header('content-type', 'application/json', charset='utf- 8')
self.response.out.write(json)
def UserArea(fuct):
def Usercheck():
return Usercheck
class PageHandler(Jinja2Handler):
def root(self):
session = self.request.session if self.request.session else None
user = self.request.user if self.request.user else None
profiles = None
emails = None
if user:
profile_keys = [ndb.Key('UserProfile', p) for p in user.auth_ids]
profiles = ndb.get_multi(profile_keys)
emails = models.UserEmail.get_by_user(user.key.id())
self.render_template('home.html', {
'user': user,
'session': session,
'profiles': profiles,
'emails': emails,
})
@UserArea
class UserHandler(Jinja2Handler):
def get(self):
self.render_template('index-2.html', {
})
インデントエラーをスキップが...私はそれを把握するように見えることはできません...私が読んだが、この How to make a chain of function decorators? が、私はそれのための基本的な理解を持っていたと思ったと思いました....しかし何
正しい方法で私を指すようにすべてのヘルプ...
私はたくさん得るために縫い目エラーが TypeError例外ではありません。「NoneType」オブジェクトは、呼び出すことはできません
私はあなたが投稿したものをかなり探していました....私はデコレータのラッパー部分の周りに私の頭を包んでいる問題を抱えていたと思います...これを見てから、それを見ましたfunctoolsをチェックアウトしています....(新しいPython、生きているための仕事の請負)lolとonのクラスの代わりにいくつかのメソッドを装飾することは、現時点ではユーザー領域を提供するための良いアイデアかもしれません。だからクラスを飾ることは今は大丈夫ですが、未来を知ることは良いことです。ありがとう –
クラスデコレータから関数を返すことは命名よりも大きな問題を抱えます - 装飾されたクラスを関数に置き換えます! –