예제 #1
0
    def get(self):
        user = users.get_current_user()
        products = []
        if user:
            url_linktext = 'Logout'
            # Función propia de la clase USER de App Engine
            url = users.create_logout_url(self.request.uri)
            # get_or_insert es una solución para obtener o crear un registro en caso de que
            # ya se encontrara guardado o no, respectivamente
            app_user = AppUser.get_or_insert(user.user_id(),
                                             identity=user.user_id(),
                                             email=user.email())

            keys = [ndb.Key(Product, int(k)) for k in app_user.products]
            if keys:
                products = ndb.get_multi(keys)
                products = filter(None, products)
        else:
            url = users.create_login_url(self.request.uri)
            url_linktext = 'Login'
        template = JINJA_ENVIRONMENT.get_template(VIEWS['index'])
        # A la función "render" se le pasa un diccionario de parámetros que se van a utilizar en la vista.
        # Estos parámetros vienen identificados por {{ }}
        self.response.write(
            template.render({'user': user, 'url': url, 'url_linktext': url_linktext, 'products': products}))
예제 #2
0
 def get(self):
     user = users.get_current_user()
     products = Product.query().order(Product.name)
     if user:
         app_user = AppUser.get_or_insert(get_user_key(user),
                                          identity=user.user_id(),
                                          email=user.email())
     else:
         return self.redirect(URLS['index'])
     template = JINJA_ENVIRONMENT.get_template(VIEWS['products'])
     self.response.write(template.render({'products': products, 'user': app_user}))
예제 #3
0
    def post(self):
        user = users.get_current_user()
        action = self.request.POST.get('action')
        # En la vista de productos, se envía un campo oculto llamado 'action'
        # Este campo puede tener tres valores distintos:
        # - 'create': se crea un nuevo producto aleatoriamente y se añade al listado principal de productos.
        # - 'buy': el usuario compra un nuevo producto.
        # - 'delete': se elimina un producto del listado principal.
        if action == 'create':
            product = Product(name='p' + str(random.randint(NAME_VALUES[0], NAME_VALUES[1])),
                              cost=random.randint(PRICE_VALUES[0], PRICE_VALUES[1]))
            product.put()
        elif user:
            product = Product.get_by_id(int(self.request.POST.get('id')))
            app_user = AppUser.get_or_insert(get_user_key(user),
                                             identity=user.user_id(),
                                             email=user.email())
            if action == 'buy':
                app_user.add_product(product)

            elif action == 'delete':
                app_user.remove_product(product)
                ndb.Key(Product, product.key.id()).delete()
        self.redirect(URLS['products'])