Motor de aplicación de Google: Obtenga un objeto de usuario de la propiedad en caché de WebApp2 (Current_USER)
-
11-12-2019 - |
Pregunta
Lo que estoy tratando de lograr es obtener el objeto de usuario de la propiedad WebApp2.Cached. Tengo un método definido en mi controlador de solicitud que me da el usuario actual.
@webapp2.cached_property
def current_user(self):
user_dict = self.auth.get_user_by_session()
return self.auth.store.user_model.get_by_id(user_dict['user_id'])
Quiero obtener el objeto de usuario porque es un usuario de operación () de uno de mis modelos, lo que es el siguiente:
class CountryImage(db.Model):
image = db.BlobProperty()
user = db.UserProperty()
country = db.ReferenceProperty(Country)
approved = db.BooleanProperty(default=False)
Ahora, cuando se publica el formulario de carga, todo funciona bien, excepto el "Usuario" que se muestra como "Ninguno" en el DataStore.
La razón posible por la que encontré mientras estaba jugando con ella en la consola interactiva fue que El método actual_user pasa una propiedad en caché web y no el objeto de usuario real.
Por ejemplo:
< webapp2.cached_property object at 0xb46aee8c >
Ahora, mi pregunta es cuál sería la mejor manera posible de recuperar el objeto de usuario? Gracias de antemano por toda su ayuda.
amith
PS: Editar:
Siguiendo es el código donde estoy tratando de almacenar la imagen en el DataStore:
NewImg = models.CountryImage()
NewImg.image = self.request.get('image')
NewImg.user = self.current_user
NewImg.country = models.Country.all().filter("url_name =", country).get()
continue_url = self.request.url
NewImg.put()
PS:
Solo para agregar, también he intentado usar el método "users.get_current_user ()" que también devuelve "ninguno"
Solución
Gracias por sus respuestas, sin embargo, ya lo hice.En caso de que esté utilizando el modelo GENACODICETGCODEDOTE de User
DE (que es una extensión para el modelo de usuario desde webapp2_extras
) puede obtener al usuario de la siguiente manera
from google.appengine.api import users
from webapp2_extras.appengine.auth.models import User
user = users.User(User.get_by_auth_id(self.current_user.auth_ids[0]).name)
o
user = users.User(User.get_by_auth_id(self.current_user.auth_ids[0]).email)
Otros consejos
Tengo curiosidad, la imagen del país, ¿está cargada por los usuarios?¿O estás gestionando aquellos como recursos?
Si no, es posible que sea mejor usar un StringProperty en el modelo de usuario, luego haga referencia a una ruta de cadena a un activo de imagen estática y ahorre las miradas de DB adicionales
users.get_current_user () debe ser la forma de ir, pero eso requiere que el usuario inicie sesión primero. ¿Estás tratando de apoyar a los usuarios anónimos?