Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- #
- # python -m pip install Flask
- #
- # Servidor web que aloja una lista de alumnos con su ID, nombre y
- # cantidad de cursos
- #
- """
- alumnos = [
- {'id':1, 'nombre':'Juan', 'cursos':4},
- {'id':2, 'nombre':'Emilia', 'cursos':1},
- {'id':3, 'nombre':'Ana', 'cursos':6},
- {'id':4, 'nombre':'Oscar', 'cursos':3},
- ]
- """
- from flask import Flask, jsonify, request
- alumnos = []
- pagina = "<h1><strong><em>HOME</em></strong></h1>"
- formulario_html = """
- <DOCTYPE html>
- <html>
- <head><meta charset="utf-8"></head>
- <body>
- <form method="POST">
- Nombre: <br>
- <input type="text" name="nombre"><br>
- Cursos: <br>
- <input type="text" name="cursos"><br>
- <br><br>
- <input type="submit" value="Enviar">
- </form>
- </body>
- </html>
- """
- def salida_html(texto):
- return f"""
- <DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>Enviado</title>
- <meta http-equiv="refresh" content="3"; URL="http://localhost:5000/form">
- </head>
- <body>
- {texto}
- </body>
- </html>
- """
- # creo la pagina web
- app = Flask(__name__)
- # creo la pagina index con decoradores
- @app.route('/')
- def index():
- return pagina
- @app.route('/instructor')
- def instructor():
- return "<p>En construcción</p>"
- # creo una vista para trabajar con los datos de los alumnos
- @app.route('/alumnos', methods=['GET', 'POST', 'PUT', 'DELETE'])
- def alumno():
- if request.method == 'GET':
- return jsonify({'alumnos':alumnos})
- elif request.method == 'POST':
- if not alumnos:
- id_alumno = 1
- else:
- id_alumno = alumnos[-1]['id'] + 1
- alumno = {
- 'id': id_alumno,
- 'nombre': request.json['nombre'],
- 'cursos': request.json['cursos'],
- }
- alumnos.append(alumno)
- return jsonify("Alumno añadido")
- elif request.method == 'PUT':
- id_alumno = request.json['id']
- for alumno in alumnos:
- if id_alumno == alumno.get('id'):
- if request.json['nombre']:
- alumno['nombre'] = request.json['nombre']
- if request.json['cursos']:
- alumno['cursos'] = request.json['cursos']
- return jsonify("Datos modificados")
- return jsonify(f"Alumno id={id_alumno} no hallado")
- elif request.method == 'DELETE':
- id_alumno = request.json['id']
- for alumno in alumnos:
- if id_alumno == alumno.get('id'):
- alumnos.remove(alumno)
- return jsonify("Alumno borrado")
- return jsonify(f"Alumno id={id_alumno} no hallado")
- else:
- return jsonify(f"Método no soportado")
- @app.route('/alumnos/<int:i>')
- def get_alumno(i):
- try:
- return jsonify({"alumno": alumnos[i-1]})
- except IndexError:
- return jsonify(f"Alumno con id={i} no hallado")
- @app.route('/form', methods=["GET","POST"])
- def formulario():
- if request.method == "GET":
- return formulario_html.encode('utf-8')
- elif request.method == "POST":
- try:
- body = dict(request.form)
- except Exception:
- mensaje = "Campos vacíos, o hay algún error"
- return salida_html.encode('utf-8')
- else:
- if body["nombre"] and body["cursos"]:
- if not alumnos:
- id_alumno = 1
- else:
- id_alumno = alumnos[-1]['id'] + 1
- print(f"""
- -------------------------------------
- ID: {id_alumno}
- Nombre: {body["nombre"]}
- Cursos: {body["cursos"]}
- -------------------------------------
- """)
- # guardo los datos
- alumno = {
- 'id': id_alumno,
- 'nombre': body['nombre'],
- 'cursos': body['cursos'],
- }
- alumnos.append(alumno)
- mensaje = "Datos guardados"
- else:
- mensaje = "Campos vacíos, o hay algún error"
- return salida_html(mensaje).encode("utf-8")
- if __name__ == "__main__":
- app.run(debug=True)
- # LINUX
- # export FLASK_APP=wbserver.py
- # flask run
- # WINDOWS
- # set FLASK_APP=wbserver.py
- # flask run
Add Comment
Please, Sign In to add comment