个人日好。我有一个问题,我无法解决。
在我正在创建的应用中,有3个文件:main,config和home.html
配置文件用于获取用户数据并将其添加到字典中。如果用户在数据存储区中不存在,他补充说。
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from google.appengine.api.app_identity import get_default_version_hostname
from google.appengine.ext import ndb
url = get_default_version_hostname()
# BANCO DE DADOS PARA SALVAR OS USUARIOS
class Usuarios(ndb.Model):
usuario = ndb.StringProperty()
email = ndb.StringProperty()
openID = ndb.StringProperty()
date = ndb.DateTimeProperty(auto_now_add=True)
tipo = ndb.StringProperty()
@classmethod
def get_email(cls, email):
return cls.query(cls.email == email)
########### FUNÇÃO QUE CHAMA O LOGIN ########
def Redir():
from google.appengine.api import users
user = users.get_current_user()
if users.is_current_user_admin():
redir = 'http://' + url + '/admin'
else:
redir = None
return redir
def Geral():
from google.appengine.api import users
user = users.get_current_user()
providers = {
'Google' : 'https://www.google.com/accounts/o8/id',
'Yahoo' : 'yahoo.com',
}
rt = {
'titulo' : 'BETA HCBravin',
'version' : '14.11.10',
'url' : 'http://' + url,
}
# O USUARIO ESTA LOGADO?
if user:
# O USUARIO E UM ADMINISTRADOR?
if users.is_current_user_admin():
dtipo = 'Admin'
else:
dtipo = 'Aluno'
# O USUARIO EXISTE NO BANCO DE DADOS?
quser = Usuarios.get_email(user.email())
buser = quser.get()
if not buser:
dbuser = Usuarios(usuario = user.nickname(), email = user.email(), openID = user.user_id(), tipo = dtipo)
dbuser.put()
if buser:
if buser.tipo == 'Professor':
dtipo = 'Professor'
else:
dtipo = 'Aluno'
rt.update({
'usuario': user.nickname(),
'email': user.email(),
'openID': user.user_id(),
'logout_url': users.create_logout_url('/'),
'user_tipo': dtipo,
})
else: # let user choose authenticator
#login_url = {'usuario': None, 'logout_url': None}
login_url = {}
for name, uri in providers.items():
login_url[name] = users.create_login_url(dest_url = ('/usuario') ,federated_identity=uri)
rt.update(login_url)
return rt
########## ############
主文件是我的应用程序的主文件,它呈现home.html
import os
import webapp2
import sys
from config import *
from google.appengine.ext.webapp import template
from google.appengine.ext.webapp.util import run_wsgi_app
Geral = Geral()
class MainHandler(webapp2.RequestHandler):
def get(self):
self.response.out.write(template.render('home.html', Geral))
app = webapp2.WSGIApplication([
('/', MainHandler),
], debug=True)
home.html只有一个值来获取变量{{ email }}
并打印它(这不是全部,逻辑。糟糕的是使用最简单的方法)
问题: 当我用用户登录时,它会完美地显示电子邮件。但是,如果我说出来并且用户静音而不是显示电子邮件,则“新”会不断弹出旧电子邮件。
即使刷新页面,这仍然存在。
答案 0 :(得分:0)
处理程序之外的代码只在实例启动时运行,而不是每个请求执行一次。 因此,在第一个访问者之后,访问者{@ 1}}不会被重复。
您应该在get方法中移动该行(并且可能更改左侧的名称与函数名称不同!)