Last active
August 29, 2015 13:57
-
-
Save nbortolotti/9553542 to your computer and use it in GitHub Desktop.
Manejo del datastore de App Engine para consultas simples
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# encoding: utf-8 | |
""" | |
datastore.py | |
Created by Nick Bortolotti on 2014-03-07. | |
Apache Licence 2.0 | |
""" | |
import cgi | |
import urllib | |
from google.appengine.api import users | |
from google.appengine.ext import ndb #importando data modeling API | |
import webapp2 | |
pagina = """\ | |
<form action="/registro?%s" method="post"> | |
<div><textarea name="content" rows="3" cols="60"></textarea></div> | |
<div><input type="submit" value="Registrar Solicitud Consulta"></div> | |
</form> | |
<hr> | |
<form>Almacen de Consultas: | |
<input value="%s" name="consulta_nombre"> | |
<input type="submit" value="cambiar"> | |
</form> | |
<a href="%s">%s</a> | |
</body> | |
</html> | |
""" | |
nombre_predeterminado_consulta = 'default_consulta' | |
def consulta_key(consulta_nombre=nombre_predeterminado_consulta): | |
return ndb.Key('Consulta',consulta_nombre) | |
#Modelo del obejeto consulta a utilizar | |
#Posee atricutos como el autor de la consulta, el contenido de la misma y su fecha. | |
class Consulta(ndb.Model): | |
autor = ndb.UserProperty() | |
contenido = ndb.StringProperty(indexed=False) | |
fecha = ndb.DateTimeProperty(auto_now_add=True) | |
class Home(webapp2.RequestHandler): | |
def get(self): | |
self.response.write('<html><body>') | |
consulta_nombre = self.request.get('consulta_nombre', nombre_predeterminado_consulta) | |
#Consulta incluyendo la busqueda indexada por fecha | |
consultas_consulta = Consulta.query(ancestor=consulta_key(consulta_nombre)).order(-Consulta.fecha) | |
consultas = consultas_consulta.fetch(10) | |
for s in consultas: #Interando las consultas obtenidas | |
if s.autor: | |
#Si existen consultas de un usuarios especifico | |
self.response.write('<b>%s</b> ha consultado :' % s.autor.nickname()) | |
else: | |
#Si las consultas son de usuarios anonimos | |
self.response.write('La consulta fue enviada por una persona anonima') | |
self.response.write('<blockquote>%s</blockquote>' % | |
cgi.escape(s.contenido)) | |
#Manejando la sesión del usuario | |
if users.get_current_user(): | |
url = users.create_logout_url(self.request.uri) | |
url_linktext = 'Logout' | |
else: | |
url = users.create_login_url(self.request.uri) | |
url_linktext = 'Login' | |
parametros_ingreso = urllib.urlencode({'consulta_nombre': consulta_nombre}) | |
self.response.write(pagina % | |
(parametros_ingreso, cgi.escape(consulta_nombre), | |
url, | |
url_linktext)) | |
#Almacen de consultas registradas | |
class Consultas(webapp2.RequestHandler): | |
def post(self): | |
consulta_nombre = self.request.get('consulta_nombre',nombre_predeterminado_consulta) | |
c = Consulta(parent=consulta_key(consulta_nombre)) | |
if users.get_current_user(): #Consulta el usuario actual autenticado | |
c.autor = users.get_current_user() | |
#Asignamos el usuario autenticado al objeto consulta en el atributo autor | |
c.contenido = self.request.get('content') #Obtienen los datos desde la forma HTML | |
c.put() #Impact en el datastore | |
parametro_consulta = {'consulta_nombre': consulta_nombre} | |
self.redirect('/?' + urllib.urlencode(parametro_consulta)) | |
application = webapp2.WSGIApplication([ | |
('/', Home), | |
('/registro', Consultas), | |
], debug=True) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment