Advertisement
teslariu

servidor web

Jan 23rd, 2023 (edited)
1,400
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.28 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #
  4. # escribo un servidor con el framework Flask
  5. # pip install Flask
  6.  
  7. from flask import Flask, jsonify, request
  8.  
  9. app = Flask(__name__)
  10.  
  11. """
  12. alumnos = [
  13.        {"id":1, "nombre":"Ale", "cursos":2},
  14.        {"id":2, "nombre":"Tito", "cursos":3},
  15.        {"id":3, "nombre":"Ana", "cursos":1},
  16. ]
  17. """
  18. alumnos = []
  19.  
  20. formulario_html = '''
  21. <DOCTYPE html>
  22. <html>
  23.    <head><meta charset="utf-8"></head>
  24.    <body>
  25.        <form method="POST">
  26.            Nombre:<br>
  27.            <input type="text" name="nombre"><br>
  28.            Cursos:<br>
  29.            <input type="number" name="cursos"><br>
  30.            <br><br>
  31.            <input type="submit" value="Enviar">
  32.        </form>
  33.    </body>
  34. </html>
  35. '''
  36.  
  37. def salida_html(texto):
  38.     return f"""
  39.    <DOCTYPE html>
  40.    <html lang="es">
  41.        <head>
  42.            <meta charset="utf-8">
  43.            <title>Enviado</title>
  44.            <meta http-equiv="refresh" content="3";URL="http://localhost:5000/form">
  45.        </head>
  46.        <body>{texto}</body>
  47.    </html>
  48.    """
  49.  
  50.  
  51. # Comienzo a escribir las páginas web
  52.  
  53. @app.route("/")
  54. def index():
  55.     return "<h1><strong><em>Hola </em>mundo</strong></h1>"
  56.  
  57. @app.route("/admin")
  58. def admin():
  59.     return "<h1>En construcción</h1>"
  60.  
  61. @app.route("/instructor")
  62. def instructor():
  63.     return "Hola"
  64.    
  65. @app.route("/alumno", methods=["GET", "POST", "PUT", "DELETE"])
  66. def alumno():
  67.    
  68.     if request.method == "GET":
  69.         return jsonify({"alumnos":alumnos})
  70.        
  71.     elif request.method == "POST":
  72.         if not alumnos:
  73.             codigo = 1
  74.         else:
  75.             codigo = alumnos[-1]["id"] + 1
  76.         alumno = {
  77.             'id':codigo,
  78.             'nombre': request.json['nombre'],
  79.             'cursos': request.json['cursos'],
  80.         }
  81.         alumnos.append(alumno)
  82.         return jsonify("Alumno añadido")
  83.  
  84.  
  85.     elif request.method == "PUT":
  86.         codigo = request.json["id"]
  87.         for alumno in alumnos:
  88.             if codigo == alumno.get('id'):
  89.                 if request.json['nombre'] is not None:
  90.                     alumno['nombre'] = request.json['nombre']
  91.                 if request.json['cursos'] is not None:
  92.                     alumno['cursos'] = request.json['cursos']
  93.                 return jsonify("Datos modificados")
  94.         return jsonify(f"Alumno id = {codigo} no hallado")
  95.    
  96.    
  97.     elif request.method == "DELETE":
  98.         codigo = request.json["id"]
  99.         for alumno in alumnos:
  100.             if codigo == alumno.get('id'):
  101.                 alumnos.remove(alumno)
  102.                 return jsonify("Alumno borrado")
  103.         return jsonify(f"Alumno id = {codigo} no hallado")
  104.        
  105. @app.route("/alumno/<int:i>")
  106. def get_alumno(i):
  107.     try:
  108.         return jsonify({"alumno":alumnos[i-1]})
  109.     except IndexError:
  110.         return f"Alumno id = {i} no hallado"
  111.                
  112. @app.route("/form", methods=["GET", "POST"])
  113. def formulario():
  114.     if request.method == "GET":
  115.         return formulario_html.encode("utf-8")
  116.    
  117.     elif request.method == "POST":
  118.         try:
  119.             body = dict(request.form)
  120.         except Exception:
  121.             pass
  122.            
  123.         else:
  124.             if body["nombre"] and body["cursos"]:
  125.                 if not alumnos:
  126.                     codigo = 1
  127.                 else:
  128.                     codigo = alumnos[-1]['id']+1
  129.                 print(f"""
  130.                -----------------------------------
  131.                ID: {codigo}
  132.                Nombre: {body["nombre"]}
  133.                Cursos: {body["cursos"]}
  134.                -----------------------------------
  135.                """)
  136.                
  137.                 # guardo los datos
  138.                 alumno = {
  139.                     'id':codigo,
  140.                     'nombre': body['nombre'],
  141.                     'cursos': body['cursos'],
  142.                 }
  143.                 alumnos.append(alumno)
  144.                 mensaje = "Datos guardados"
  145.             else:
  146.                 mensaje = "Campos vacíos o error en datos"
  147.             return salida_html(mensaje).encode("utf-8")
  148.                
  149.  
  150.    
  151. if __name__ == "__main__":
  152.     app.run(debug=True)
  153.    
  154. # Linux
  155. # export FLASK_APP=webserver.py
  156. # flask run
  157.  
  158. # Windows
  159. # set FLASK_APP=webserver.py
  160. # flask run
  161.  
  162.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement