Qué es Flask? Flask es un micro web framework desarrollado en Python y basado en el toolkit de Werkzeug y en el motor de plantillas Jinja2. Flask es bastante popular en la comunidad actualmente con 28,538 stars en Github.
Y qué es un micro web framework? “Micro” no significa que toda tu aplicación tiene que caber en un solo archivo Python (aunque si es posible), tampoco significa que a Flask le falta funcionalidad. El “micro” en microframework significa que Flask matiene un core simple pero que puede ser extendido. Flask no toma muchas decisiones por ti, como por ejemplo que base de datos utilizar. Y las decisiones que si toma son faciles de cambiar, por ejemplo que motor de plantillas va a utilizar. Todo lo demás depende de ti. Asi, Flask puede ser todo lo que necesitas y nada que no necesites.
"La idea de Flask es construir una buena base para todas tipo de aplicaciones. El resto depende de ti o de extensiones." Armin Ronacher, creador de Flask
Quienes utilizan Flask actualmente? • Pinterest: – "En el presente la API de Pinterest procesa al rededor de 12 billones de requests por día, todo en Flask." Steve Cohen. • Linkedin: – "Toda nuestra infraestructura interna esta desarrollada en Python: deployment, monitoreo, performance, y todos los sitios internos son Python. Y eso sin incluir el procesamiento y analisis de Big Data." Rachel Sanders, Pycon 2014. • Twilio, wakatime, close.io, Indico.
POST y GET from flask import Flask app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def hello_world(): if request.method == 'POST': return 'Esto es un POST' elif request.method == 'GET': return 'Esto es un GET' if __name__ == '__main__':
Flask-RESTful es una extensión de Flask que agrega soporte para desarrollar rapidamente REST APIs. Funciona con una abstracción que la hace minimalista y funciona con librerias/ORMs existentes.
Simple from flask import Flask from flask_restful import Resource, Api app = Flask(__name__) api = Api(app) class HelloWorld(Resource): def get(self): return {'hello': 'world'} api.add_resource(HelloWorld, '/') if __name__ == '__main__': app.run(debug=True)
Ruteo con Recursos La principal ventaja de Flask-RESTful son los recursos. Los Recursos son construidos encima de las vistas de Flask, dando un facil acceso a multiples metodos HTTP al definir estos metodos en los recursos. Un recurso de CRUD básico se vería como el siguiente.
Formato de los Datos from collections import OrderedDict from flask_restful import fields, marshal_with resource_fields = { 'task': fields.String, 'uri': fields.Url('todo_ep') } class TodoDao(object): def __init__(self, todo_id, task): self.todo_id = todo_id self.task = task # Este campo no se enviara en la respuesta self.status = 'active' class Todo(Resource): @marshal_with(resource_fields) def get(self, **kwargs): return TodoDao(todo_id='my_todo', task='Remember the milk')
Con WTForms, los campos de la form en HTML pueden ser generados automaticamente pero también se pueden modificar en base a las plantillas preestablecidas. Esto permite la separación entre el codigo que sirve para el procesamiento y el que sirve para la presentación dando como resultad un codigo más claro y efectivo.
Forms from wtforms import Form, TextField, TextAreaField, SubmitField, validators, ValidationError class ContactForm(Form): name = TextField("Name", [validators.Required("Please enter your name.")]) email = TextField("Email", [validators.Required("Please enter your email address."), validators.Email("Please enter your email address.")]) subject = TextField("Subject", [validators.Required("Please enter a subject.")]) message = TextAreaField("Message", [validators.Required("Please enter a message.")]) submit = SubmitField("Send")
Plantillas {% extends "layout.html" %} {% block content %} Contact {% if success %} Thank you for your message. We'll get back to you shortly. {% else %} {% for message in form.name.errors %} {{ message }} {% endfor %} {% for message in form.email.errors %} {{ message }} {% endfor %} {% for message in form.subject.errors %} {{ message }} {% endfor %} {% for message in form.message.errors %} {{ message }} {% endfor %}
Necesito Apache o algún otro Web Server para correr Flask? Inicialmente no, ya que Flask incluye un Built-in Development Server, sin embargo lo ideal es que para producción se utilice un Web Server como Nginx, Waitress o Apache.