Me parece excelente pedagogía. Se basa mucho más en la práctica y tenemos la documentación como soporte en caso de querer ir más allá.
Fundamentos de Flask
Qué aprenderás sobre Flask
¿Cómo funcionan las aplicaciones en internet?
¿Qué es Flask?
Instalación de Python, pip y virtualenv
Hello World Flask
Debugging en Flask
Request y Response
Ciclos de Request y Response
Uso de templates y archivos estáticos
Templates con Jinja 2
Estructuras de control
Herencia de templates
Include y links
Uso de archivos estáticos: imágenes
Configurar páginas de error
Extensiones de Flask
Flask Bootstrap
Configuración de Flask
Implementación de Flask-Bootstrap y Flask-WTF
Uso de método POST en Flask-WTF
Desplegar Flashes (mensajes emergentes)
Pruebas básicas con Flask-testing
Proyecto
Planteamiento del proyecto: To Do List
App Factory
Uso de Blueprints
Blueprints II
Base de datos y App Engine con Flask
Configuración de Google Cloud SDK
Configuración de proyecto en Google Cloud Platform
Implementación de Firestore
Autenticación de usuarios: Login
Autenticación de usuarios: Logout
Signup
Agregar tareas
Eliminar tareas
Editar tareas
Deploy a producción con App Engine
Conclusiones
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.
Antes: $249
Paga en 4 cuotas sin intereses
Termina en:
Bernardo Cassina
Aportes 36
Preguntas 11
Me parece excelente pedagogía. Se basa mucho más en la práctica y tenemos la documentación como soporte en caso de querer ir más allá.
¡Hola Comunidad!
Uno compañero de Platzi hizo la siguiente pregunta: ¿Cuál es la diferencia entre extends e include? Me parece que la respuesta que le di puede ser de utilidad para otros que tengan la misma duda. Así que la copio aquí como aporte 👇:
.
Cuando usas el keywords extends
para llamar a una plantilla, esta plantilla que has llamado toma el control de tu vista. Tomemos el ejemplo con el que venimos trabajando.
.
Contenido del archivo hello.html
(reducido para el ejemplo):
01. {% extends 'base.html' %}
02.
03. {% block title %}
04. {{ super() }}
05. Bienvenida
06. {% endblock %}
07.
08. {% block content %}
09. {% if user_ip %}
10. <h1>Hello World Platzi, tu IP es {{ user_ip }}</h1>
11. {% else %}
12. <a href="{{ url_for('index') }}">Ir a inicio</a>
13. {% endif %}
14. {% endblock %}
Nota que llamar a base.html
hace que ahora todo el contenido de hello.html
gira en torno al primero. Puedes notar esto, específicamente en la línea #4, dónde necesita utilizar el método super()
para traer contenido de la plantilla PADRE.
.
Adicionalmente puedes ver en la línea #8 que se crea un bloque content
que contiene (dependiendo del condicional) un Título o un Enlace. Este contenido SOLO se mostrará si nombra a este bloque content
en base.html
. Por lo que si revisas el código de base.html
podrás ver la llamada del PADRE al HIJO:
.
El código que copio de base.html
ha sido adaptado para el ejemplo:
<!DOCTYPE html>
<html lang="en">
<head>
<title> {% block title %} Flask Platzi | {% endblock %} </title>
</head>
<body>
<!-- Aquí puedes ver la llamada del padre al hijo -->
{% block content %}
{% endblock %}
</body>
</html>
Sin embargo, cuando usas el keyword import
lo único que haces es enlazar una plantilla con otra y será hello.html
quien tendrá el control de hacer la llamada al contenido de la otra plantilla cuando lo requiera. Puedes ver lo aquí:
.
El código que copio de hello.html
ha sido adaptado para el ejemplo:
01. {% import 'macros.html' as macros %}
02.
03. {% block content %}
04. <ul>
05. {% for todo in todos %}
06. {{ macros.render_todo(todo) }}
07. {% endfor %}
08. </ul>
09. {% endblock %}
Como puedes ver en la línea #6 es hello.html
quien decide llamar y usar el macro, inclusive podrías importar macros.html
y no usarlo. Cosa que no podría pasar con extends
.
.
Espero que te haya servido algo de lo explicado aquí.
.
¡Saludos!
Me gusta mucho el curso
pasas de mucha teoría que si la explicaras facilitaría mucho entender y aprender mas rápido
pregunta ¿este html se renderea en el servidor o en el cliente?
Creamos un archivo navbar.html:
<nav>
<ul>
<li><a href="{{ url_for('index') }}">Ir a inicio</a></li>
<li><a href="https://midiaenunosminutos.com" target="_blank">Ir a mi blog</a></li>
</ul>
</nav>
Y lo incluimos en base.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %} Curso Flask | {% endblock %}</title>
</head>
<body>
<header>
{% include 'navbar.html' %}
</header>
{% block content %}
{% endblock %}
</body>
</html>
Me gusta mucho que el curso es bastante práctico, cursos llenos de teoría hay en todos lados, pero donde te pongan a practicar verdaderamente pocos, por eso me ha gustado mucho este curso.
para los que quieran profundizar:
Soy docente en otra área, esto parece mas un taller que una clase. No deberían saltarse toda la teoría porque pueden confundir a muchos estudiantes… Siempre se puede ir a la documentación, pero esa no es la idea de venir a Platzi.
En serio deberían planear mejor los contenidos.
Entonces cual seria la diferencia entre el include y el block??? 😮
main.py
from flask import Flask, request, make_response, redirect, render_template
app = Flask(__name__)
todos = ['Crompar Cafe', 'Entregar Informe', 'Salir a caminar']
@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():
user_ip = request.cookies.get('user_ip')
render = render_template(
'hello.html',
user_ip=user_ip,
todos=todos
)
return render
if __name__ == "__main__":
app.run(debug=True)
- Created variables in cosole ```bash export FLASK_APP= main.py #app principal para ejecución export FLASK_DEBUG=1 #active debug flask ``` - Commands **`echo $varible`** —Ver variable `**flask run**` —Correr flask
Si les falla la carga de archivos este fix en la ruta les servira
<a href="{{url_for('index')}}">
Excelente!
Después de Django (y todo el trabajo que me costó) Flask me parece mucho más tranquilo y amigable 😆
El inlcude es lo mismo que hacer un import pero en esa misma linea llamamos a lo que incluímos(importamos)
excelente clase. Gracias.
que buena explicacion, sencilla
esto esta hermoso
Si coincido con muchos acá, yo ya había probado web dev antes, pero nunca con Python siempre Js me atoraba, ahora como ya tengo nociones y todo me encanta el ritmo como se avanza acá, me encantó hacer el hello world tan pronto etc etc, pero creo que antes me hubiera frustrado muchísimo
Soy de seguridad, pero siempre me ha llamado la atención el desarrollo web. Tome el curso de Bootstrap el cual amé, Javascript, etc. Ahora, Python es muy importante para nosotros los Pentesters. Quiero ver como opera Python en el entorno web, y hasta ahora muy interesante. Espero se le de más estática a la aplicación en las siguientes clases.
excelente clase interactiva 😄
Excelente, clase
navbar.html
<nav>
<ul>
<li> <a href=" {{ url_for('index') }} ">Ir a inicio</a> </li>
<li> <a href="https://platzi.com/" target=" blank">Platzi</a> </li>
</ul>
</nav>
macros.html
{% macro render_todo(todo) %}
<li>Descripcion: {{todo}} </li>
{% endmacro %}
base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>
{% block title %}
Flask Platzi |
{% endblock %}
</title>
</head>
<body>
<header>
{% include 'navbar.html' %}
</header>
{% block content %}
{% endblock %}
</body>
</html>
hello.html
{% extends 'base.html' %}
{% import 'macros.html' as macros %}
{% block title %}
{{ super() }}
Bienvenido
{% endblock %}
{% block content %}
{% if user_ip %}
<h1>Hola Mundo, soy la ip: {{user_ip}} </h1>
{% else %}
<a href=" {{ url_for('index') }} "> Ir al inicio de la pagina </a>
{% endif %}
<ul>
{% for todo in todos %}
{{macros.render_todo(todo)}}
{% endfor %}
</ul>
{% endblock %}
debo decir que jinja2 y blade en laravel, son muy similares!! y creo que eso es genial porque es facil entender como funciona cada motor!
Gracias.
Resumen:
<nav>
<ul>
<li><a href="{{ url_for('index')}}"> Ir a inicio</a></li>
<li><a href="https://google.com" target="_blank">Ir a google</a></li>
</ul>
</nav>
<header>
{% include 'navbar.html' %}
</header>
Cual es la diferencia de esto a un macro?
Si les sirve , les dejo la documentación de Flask , aqui pueden encontrar muchos ejemplos para seguir aprendiendo . Saludos https://flask.palletsprojects.com/en/1.1.x/
Excelente clase!!
{% include 'archivo.html' %}
Es muy parecido a usar algun preprocesador de css. 🤜
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?