No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Curso de Flask

Curso de Flask

Bernardo Cassina

Bernardo Cassina

Ciclos de Request y Response

8/36
Recursos

Request-Response: es uno de los m茅todos b谩sicos que usan las computadoras para comunicarse entre s铆, en el que la primera computadora env铆a una solicitud de algunos datos y la segunda responde a la solicitud.

Por lo general, hay una serie de intercambios de este tipo hasta que se env铆a el mensaje completo.

Por ejemplo: navegar por una p谩gina web es un ejemplo de comunicaci贸n de request-response.

Request-response se puede ver como una llamada telef贸nica, en la que se llama a alguien y responde a la llamada; es decir hacemos una petici贸n y recibimos una respuesta.

Aportes 29

Preguntas 12

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Para los que no saben que son las cookies, aqui un video que explica muy bien, que son y para que sirven 馃槈
https://www.youtube.com/watch?v=QFrUTDfYgnM

El codigo es vulnerable a XSS.
Una ves que la cookie user_ip es guardada en el browser, el usuario es capaz de modificarla y ejecutar lo que guste.

Para evitar esto, recomendaria importar escape de flask, y hacer lo siguiente:

@app.route("/hello")
def ip():
	user_ip = request.cookies.get('user_ip')
	user_ip = escape(user_ip)
	return "Tu ip es {}".format(user_ip)

Si no saben que es XSS, les dejo algunos recursos:

En espa帽ol:
https://www.youtube.com/watch?v=inCS6PQYu34

En ingles:
https://www.youtube.com/watch?v=EoaDgUgS6QA

En mi caso a m铆 me aparece como None la IP

Si quieren probar su proyecto en diferentes dispositivos conectados a su misma red pueden correr la aplicaci贸n con el comando

flask run --host=0.0.0.0

despu茅s solo escriben la direcci贸n IP de la m谩quina en la que est谩 corriendo la aplicaci贸n m谩s el puerto ej. 192.168.0.3:5000

Les adjunto mi versi贸n de c贸digo, la cual se ejecuta directamente desde el main.py

from flask import Flask, request, make_response, redirect


app = Flask(__name__)

@app.route('/')
def index():

    user_ip = request.remote_addr
    make = redirect('/hello')
    response = make_response(make)
    response.set_cookie('user_ip', user_ip)

    return response

@app.route('/hello')
def hello():    

    mensaje = 'Hola Mundo!!'
    user_ip = request.cookies.get('user_ip')

    return mensaje + user_ip

if __name__ == "__main__":
    
    app.run(debug=True)

Tambi茅n pueden crear rutas din谩micas, copien el siguiente c贸digo y en su navegador vayan a la ruta 鈥127.0.0.1:5000/hello/<user>鈥 y user sustit煤yanlo por cualquier nombre.

Que ventajas tiene el utilizar redirect y cookies en la forma en la que se utiliz贸 en esta clase?

Mis apuntes

En esta clase se hizo la creaci贸n de una nueva ruta donde se va guardar la ip en una cookie para luego ser redirigido a la nueva ruta donde se mostrara el mensaje que ya hicimos en las clases anteriores. Para ello se hizo lo siguiente;

  1. Crear una nueva ruta llamada hello @app.route('/hello')
  2. Importar los objetos make_response y redirect
  3. Crear la variable response = make.response(redirect(鈥/hello鈥))
  4. Asignarle una cookie con response.set_cookie(鈥檜ser_ip鈥, user_ip)
  5. Retornar la variable response con return response
  6. En la ruta @app.route('/') asignar valor a la variable user_ip con user_ip = request.cookies.get('user_ip')
from flask import Flask, request, make_response, redirect

app = Flask(__name__)

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

    response = make_response(redirect('/hello'))
    response.set_cookie('user_ip', user_ip)

    return response

@app.route('/hello')
def hello():

    user_ip = request.cookies.get('user_ip')

    return 'Hello Platzi, tu IP es {}'.format(user_ip)

Code

from flask import Flask, request, make_response, redirect

app = Flask(__name__)

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

    response = make_response(redirect('/hello'))
    response.set_cookie('user_ip', user_ip)

    return response

@app.route('/hello')
def hello():

    user_ip = request.cookies.get('user_ip')

    return 'Hello Platzi, tu IP es {}'.format(user_ip)

Un blog que explica de manera clara el tema del manejo de cookies es este:

https://lineadecodigo.com/python/gestionar-cookies-flask

驴llevas horas ejecutando el c贸digo y por alguna raz贸n a veces funciona y otras veces no? NO TE COMPLIQUES! Usa el navegador que por defecto utilizamos en el curso, por alguna raz贸n existen problemas de compatibilidad entre el servidor local y los navegadores modernos no inicializan bien algunos par谩metros.

No te rindas, compa帽ero!

Este curso es uno de lo mejores y mejor explicados en los que he estado. Muy buen profesor, explica super claro y sin afanes.

ac谩 encontramos los atributos y metodos de request aqu铆

Que son las cookies: Las cookies son usualmente son peque帽os archivos de texto y se almacenan en el directorio del navegador de tu ordenador o en las subcarpetas de datos de programa.

Las cookies se crean cuando utilizas tu navegador para visitar un sitio web que las utiliza para hacer un seguimiento de tus movimientos por el sitio, ayudarte a indicarte d贸nde dejaste la navegaci贸n, recordar tu inici贸 de sesi贸n y selecci贸n de tema, preferencias y otras funciones de personalizaci贸n.

A menudo las cookies son indispensables en las webs que tienen bases de datos muy grandes, requieren inicio de sesi贸n, tienen temas personalizables y otras funciones avanzadas.


Mas informacion: Cookies

Que buen profe 馃槃

Otra forma de usar el redirect es con una url_for
, esta va a generar una url completa a la ruta asignada por el metodo

    response = make_response(redirect(url_for('hello')))

En este caso con el metodo hello

Ciclos de Request y Response

Podemos crear y obtener cookies desde el browser de la siguiente manera:

from flask import Flask, request, make_response, redirect

app = Flask(__name__)

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

    response = make_response(redirect('/hello'))
    response.set_cookie('user_ip', user_ip)

    return response

@app.route('/hello')
def hello():
    user_ip = request.cookies.get('user_ip')
    return f'Tu direcci贸n IP, (despu茅s de haberla obtenida con una cookie 馃崻) es {user_ip}'

驴As铆 de sencillo?

from urllib import response
from flask import Flask, request, make_response, redirect

app = Flask(__name__)

# Ciclo de Response
@app.route('/')
def index ():
    user_ip = request.remote_addr

    response = make_response(redirect('/hello'))
    response.set_cookie('user_ip', user_ip)

    return response

# Ciclo de Request
@app.route('/hello')
def hello ():
    user_ip = request.cookies.get('user_ip')
    return 'Hola Platzi, tu IP es {}'.format(user_ip)
# import main Flask class and request object
from flask import Flask, request

# create the Flask app
app = Flask(__name__)

@app.route('/query-example')
def query_example():
    return 'Query String Example'

@app.route('/form-example')
def form_example():
    return 'Form Data Example'

@app.route('/json-example')
def json_example():
    return 'JSON Object Example'

if __name__ == '__main__':
    # run app in debug mode on port 5000
    app.run(debug=True, port=5000)

Mi code

from flask import Flask, request, make_response, redirect


app = Flask(__name__)

@app.route('/')
def index():
    user_ip = request.remote_addr
    response = make_response(redirect('/hello'))
    response.set_cookie('user_ip', user_ip)
    return response

@app.route('/hello')
def hello():
    user_ip = request.cookies.get('user_ip')
    return 'Hello World Platzi, tu IP es {}'.format(user_ip)```

Me da el siguiente error:

NameError: global name 'make_response' is not defined

from flask import Flask, request, make_response, redirect
app = Flask(name)

@app.route(鈥/鈥)
def index():
user_ip = request.remote_addr
response = make_response(redirect(鈥/hello鈥))
response.set_cookie(鈥榰ser_ip鈥, user_ip)

return response

@app.route(鈥/hello鈥)
def hello_world():
#creamos nueva variable de la ip que detectamos en el browser
user_ip = request.cookies.get(鈥榰ser_ip鈥)

return 'Hello, Word, tu IP es {}'.format(user_ip)

  • Request-Response: es uno de los m茅todos b谩sicos que usan las computadoras para comunicarse entre s铆.
  • redirect, redirecciona a otro lugar de la aplicaci贸n.
  • response, podemos establecer las cookies de sesi贸n de usuario.
  • request, para conseguir los datos enviados por el navegados como las cookies

Bien, gracias.

que sencillo, muy chevere

chevere