Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso de Flask

Curso de Flask

Bernardo Cassina

Bernardo Cassina

Agregar tareas

32/36
Recursos

Aportes 21

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Aquí les dejo un pequeño diagrama de lo que hicimos en la clase:
![](

Firestore es demasiado intuitivo ! 😃

Me da cosa, que le diga “formas” a los formularios.

SIENTO EL PODEEERR!!

Test de hello_post actualizado:

def test_hello_post(self):
        #Login
        self.client.post(url_for('auth.login'), data=self.fake_log_form)
        fake_todo_form = {
            'description': 'fake_todo'
        }

        try:
            #Send todo
            response = self.client.post(url_for('hello'), data=fake_todo_form)
            self.assertRedirects(response, url_for('hello'))
        finally:
	    #Remove from db
            db_service._delete_todo(
                self.fake_log_form['username'], 
                fake_todo_form['description'], 
                caller=self    
            )

En la clase de tests cree una variable para reutilizar la misma login form en varios tests.

Este instructor da clase y parece que es solo que la da que no explica los pasos eso quiere decir que solo es muy bueno para el

Si hacemos una comparación de mongoDB y Firestore, con cuál se quedarían para un proyecto de una red social tipo twitter?

Por si quieren añadir el botón de sign up al navbar cuando no hay una sesión activa:

{% if current_user.is_authenticated == False %}
    <li><a href="{{ url_for('auth.signup') }}">Sign Up</a></li>
{% endif %}

no se muestran los todos, por que ?

Al principio me parecía demasiado dificil este tema, pero ha medida que practiba y solucionaba los errores fui aprendiendo, el siguiente paso es practicar

Firestore es muy cómodo para usar.

Me da la descripción en este formato, Alguien sabe porque?
Descripción: <google.cloud.firestore_v1.document.DocumentSnapshot object at 0x106c57d50>
Aquí mi hello.html

{% extends 'base.html' %}
{% import 'macros.html' as macros %}
{% import 'bootstrap/wtf.html' as wtf %}

{% block title %} 
    {{ super() }}
    Bienvenido 
{% endblock %}

{% block content %}
    {% if username %}
        <h1>Bienvenido, {{ username | capitalize }}</h1>
    {% endif %}
    {% if user_ip %}
        <h3>
            Hello, tu ip es {{ user_ip }}
        </h3>
    {% else %}
        <ahref="{{ url_for('index') }}">ir a inicio</a>
    {% endif %}
    <div class="container">
        <h3>Crear nueva tarea</h3>
        {{ wtf.quick_form(todo_form) }}
    </div>
    <ol>
        {% for todo in todos %}
            {{ macros.render_todo(todo) }}
        {% endfor %}
    </ol>
{% endblock %}

Aquí main.py

"""
activar nuestro entorno con: source venv/bin/activate
SE CORRE EN EL ENTORNO VIRTUAL Y DEFINIMOS VARIABLES DE ENTORNO PARA QUE FUNCIONE 
export FLASK_APP=main.py
export FLASK_DEBUG=1
export FLASK_ENV=development
"""
import unittest
from flask import request, make_response, redirect, render_template, session, url_for, flash
from flask_login import login_required, current_user


from app import create_app
from app.forms import LoginForm, TodoForm
from app.firestore_service import get_users, get_todos, put_todo

app = create_app()


@app.cli.command()
def test():
    tests = unittest.TestLoader().discover('tests')
    unittest.TextTestRunner().run(tests)


@app.errorhandler(404)
def not_found(error):
    return render_template('404.html', error=error)


@app.errorhandler(500)
def server_error(error):
    return render_template('500.html', error=error)


@app.route('/')
def index():
    user_ip = request.remote_addr

    response = make_response(redirect('/hello'))
    session['user_ip'] = user_ip

    return response


@app.route('/hello', methods=['GET','POST'])
@login_required
def hello():
    user_ip = session.get('user_ip')
    username = current_user.id
    todo_form = TodoForm()

    context = {
        'user_ip': user_ip,
        'todos': get_todos(user_id=username),
        'username': username,
        'todo_form': todo_form
    }

    if todo_form.validate_on_submit():
        put_todo(user_id=username, description=todo_form.description.data)
        flash('Tu tarea se creo con éxito')
        return redirect(url_for('hello'))
 
    return render_template('hello.html', **context)

y mis funciones de que tengo en el service


def get_todos(user_id):
    return db.collection('users')\
        .document(user_id)\
        .collection('todos').get()


def put_todo(user_id, description):
    todos_collection_ref = db.collection(
        'users').document(user_id).collection('todos')
    todos_collection_ref.add({'description': description})


``

Cuando usas set() para crear un documento, debes especificar un ID para el documento que vas a crear. Por ejemplo:

db.collection(u'cities').document(u'new-city-id').set(data)snippets.py

Pero a veces no hay un ID significativo para el documento y es más conveniente dejar que Cloud Firestore genere automáticamente un ID. Para hacerlo, llama a add():

city = City(name=u'Tokyo', state=None, country=u'Japan')
db.collection(u'cities').add(city.to_dict())snippets.py

Comparado con Django.

forms. py = Vienen siendo los modelos
main. py = vienen siendo las vistas
template = Los templates

Como nota no es necesario volver ha hacer un redirect a hello dentro del condicional, ya que lo ejecuta al terminal la funcion

@app.route('/hello', methods=['GET', 'POST'])
@login_required
def hello():
    username = current_user.id
    todo_form = form.TodoForm()
    contex = {
        'user_ip': session.get('user_ip'),
        'todos': db.get_todos(username),
        'username': username,
        'todo_form': todo_form
    }

    if todo_form.validate_on_submit():
        description = todo_form.description.data
        db.todo_put(username, description)
        flash('Tarea agregada con exito')

    return render_template('hello.html', **contex)

por que no me salen los todos

https://imgur.com/iYNXPw2

Podrían explicarme porque a la hora de agregar un nuevo usuario no se usa el metodo add() tal como se utiliza al agregar un todo?

Cool ya le voy entendiendo el uso de firebase

A modo de conocimiento de seguridad en la web les pregunto ¿alguno de ustedes a intentado guardar un script en la base de datos?

que pesar que me quede en la clase de "implementación de firestore ", me salio error y no pude arreglarlo 😦