Ayuda de inserción de datos de formulario de almacén de datos, por favor

El objetivo es obtener variables de "nombre", "estado de ánimo" y fecha en Datastore. Todo lo que veo que vale la pena en Datastore es una clave de entidad de aspecto criptográfico y un índice de fecha de estado de ánimo de nombre de visitante sin datos, a pesar de haber enviado formularios web varias veces.

Aquí está el formulario

Nombre principal:

Selecciona

Bueno

Malo

Justo

Ejecutar esto en DS Console me da

ameError: el nombre 'visitante' no está definido

q = Visitor.all()
q = db.GqlQuery("SELECT * FROM Visitor")  #in DS Console
results = q.fetch(2)
for p in results:
    print "%s" % (p.name)

#DATASTORE v v
class Visitor(db.Model):                   # index.py
    name = db.StringProperty()
    mood = db.StringProperty()
    date = db.DateTimeProperty(auto_now_add=True)

 class Post(webapp.RequestHandler):           #yaris
  def get(self):
    visitor_db = Visitor()
    visitor_db.name = self.request.get("name")
    visitor_db.mood = self.request.get("mood")
    visitor_db.put()

e index.yaml:

indexes:                              # seems like this is OK

-   kind: Visitor 
    properties:
    -   name: name
    -   name: mood
    -   name: date
        direction: asc

También se obtienen errores 405 en la terminal al enviar el formulario.

EDITAR: tengo esto funcionando con lo siguiente; gracias por la ayuda.

class MainPage(webapp.RequestHandler):
    def get(self):
        self.response.out.write("""<html><body>
<form action="/es/" method="post">
                           # form is here
</body></html> """) 

        name = self.request.get("name")
        name = name.capitalize()
        mood = self.request.get("mood")
        localtime = time.localtime(time.time())
        mon = localtime[1] # MONTH
        h = localtime[3] # HOUR

        # if/elif statements with %s specifiers follow...still in MainPage class v v

> def post(self):
>         name = self.request.get("name")
>         name = name.capitalize()
>         mood = self.request.get("mood")
>         info = Visitor(name = name, mood = mood)
>         info.put()
>         self.redirect("/index.py")

¡Esto almacena datos en Datastore! Ahora, lo único que necesito arreglar es obtener las respuestas del formulario para imprimir en la página del formulario original (index.py), en el div adecuado, que tengo float-right al lado del formulario. En cambio, las respuestas enviadas por el formulario aparecen en una página diferente sin formato. He jugado con self.redirect y lo siguiente, pero necesito alguna dirección sobre cómo implementar esto o incluso si soy el camino correcto, para obtener respuestas de formulario para imprimir en la página del formulario, no en una página diferente:

Manejador creado

    redirectionHandler = urllib2.HTTPRedirectHandler() 

    # 2 apply the handler to an opener
    opener = urllib2.build_opener(redirectionHandler)

    # 3. Install the openers
    urllib2.install_opener(opener)


    request = urllib2.Request("http://*my url*", #commented out     data=urllib.urlencode({'key':'value'}))
    response = urllib2.urlopen(request)

preguntado el 12 de junio de 12 a las 19:06

¿Intentó ejecutar la consulta en el visor del almacén de datos de la consola de administración? Te sugiere qué índices necesitas crear. -

Ejecuté esto en la consola de administración. -

Actualicé mi respuesta ... tal vez sea la publicación (auto) ya que tiene un envío de formulario. -

2 Respuestas

Parece que no estás creando ninguna entidad para poder put(). Prueba esto para empezar:

class Post(webapp.RequestHandler):   
  def post(self):
    visitor_db = Visitor()
    visitor_db.name = self.request.get("name")
    visitor_db.mood = self.request.get("mood")
    visitor_db.put()

El código anterior creará una nueva entrada y la almacenará.

Actualicé mi respuesta, si está utilizando un formulario para enviar datos, entonces debe cambiar el get(self) a post(self) ya que el navegador está solicitando un POST solicitud al enviar el formulario.

Respondido el 17 de junio de 12 a las 11:06

gracias Lipis, sí, creo que la solicitud de publicación fue un problema. He actualizado mi código original arriba para mostrar cómo hice que esto funcionara. ¡Eso es por tu ayuda! - p1nesap

@pavl revise sus preguntas anteriores y haga lo mismo... si no hay respuesta, mejore la pregunta o elimínela si se resolvió sin respuesta... - lípidos

Parece que tiene la idea correcta, pero debe depurar ApplyHandler.post(), lo más probable es que su problema esté ahí. Es posible que le falten los datos de la publicación en su solicitud y el objeto newuser puede inicializarse con un montón de datos Ninguno.

Respondido el 12 de junio de 12 a las 20:06

gracias... ¿qué haría exactamente con ApplyHandler? este script no está leyendo los valores de formulario que puedo usar de otra manera de name = form.getvalue("name") - p1nesap

¿Está diciendo que self.request.get("name") devuelve un valor vacío? Si es así, creo que desea concentrarse en su código de formulario en lugar de en el almacén de datos. - larry hosken

gracias por las respuestas... He actualizado el código y no estoy seguro de cómo probar ApplyHandler.(post) y self.request.get("name") ya que el botón Enviar no funciona cuando Firebug está abierto para esta aplicación... no arroja errores, la aplicación funciona de otra manera. - p1nesap

Entonces el problema está en el envío de su formulario HTML. No ha publicado su formulario HTML aquí, por lo que no podemos ayudarlo con eso. - dragonx

¿Cómo selecciono 2 respuestas como útiles? - p1nesap

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.