115 lines
3.3 KiB
Python
115 lines
3.3 KiB
Python
from flask import Flask, jsonify, request, render_template, redirect
|
|
import json
|
|
import os
|
|
|
|
compiti = []
|
|
id_counter = 0
|
|
|
|
def update_file():
|
|
with open('compiti.json', 'w') as f:
|
|
json.dump(compiti, f)
|
|
|
|
if os.path.isfile('compiti.json'):
|
|
with open('compiti.json', 'r') as f:
|
|
compiti = json.load(f)
|
|
id_counter = compiti[-1]["id"] + 1
|
|
else:
|
|
compiti = [
|
|
{"id": 1, "descrizione": "Compito matematica"},
|
|
{"id": 2, "descrizione": "Consegna TPSIT progetto API REST"},
|
|
{"id": 3, "descrizione": "Compito di sistemi"},
|
|
{"id": 4, "descrizione": "Compito di italiano"}
|
|
]
|
|
id_counter = 5
|
|
update_file()
|
|
|
|
|
|
|
|
app = Flask(__name__)
|
|
|
|
@app.route("/", methods=["GET"])
|
|
def home():
|
|
html = "<h1>Home page API REST Compiti</h1>"
|
|
html += "<a href=\"/ui\">Apri interfaccia web</a><br><a href=\"/doc\">Documentazione</a>"
|
|
return html, 200
|
|
|
|
@app.route("/doc", methods=["GET"])
|
|
def get_doc():
|
|
return render_template("doc.html"), 200
|
|
|
|
@app.route("/compiti", methods=["GET"])
|
|
def get_compiti():
|
|
return jsonify(compiti), 200
|
|
|
|
@app.route("/compiti/<int:id>", methods=["GET"])
|
|
def get_compito_by_id(id):
|
|
for ciscomerda in compiti:
|
|
if ciscomerda["id"] == id:
|
|
return jsonify(ciscomerda), 200
|
|
return jsonify([]), 404
|
|
|
|
@app.route("/compiti", methods=["POST"])
|
|
def create_compito():
|
|
global id_counter
|
|
j = request.get_json()
|
|
j["id"] = id_counter
|
|
id_counter += 1
|
|
compiti.append(j)
|
|
update_file()
|
|
return jsonify(j), 201
|
|
|
|
@app.route("/compiti/<int:id>", methods=["DELETE"])
|
|
def delete_compito(id):
|
|
for ciscomerda in compiti:
|
|
if ciscomerda["id"] == id:
|
|
compiti.remove(ciscomerda)
|
|
update_file()
|
|
return jsonify(ciscomerda), 200
|
|
return jsonify([]), 404
|
|
|
|
@app.route("/ui")
|
|
def web_ui():
|
|
# Tabella compiti
|
|
html = "<html><head>"
|
|
html += "<meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><title>Gestione compiti</title>"
|
|
html += "</head><body><table border>"
|
|
for ciscomerda in compiti:
|
|
html += "<tr>"
|
|
html += f"<td>{ciscomerda["descrizione"]}</td><td><a href=\"/form_delete?id={ciscomerda["id"]}\" class=\"button\"><button>Elimina</button></a>"
|
|
html += "</tr>"
|
|
html += "</table>"
|
|
|
|
html += "<form action=\"/form_add\">"
|
|
html += "<input type=\"text\" name=\"descrizione\" placeholder=\"Descrizione compito\">"
|
|
html += "<input type=\"submit\" value=\"Aggiungi compito\">"
|
|
html += "</form></body></html>"
|
|
|
|
return html, 200
|
|
|
|
@app.route("/form_add")
|
|
def form_add():
|
|
if not request.args.get("descrizione"):
|
|
return "Errore: descrizione mancante", 400
|
|
else:
|
|
global id_counter
|
|
d = request.args.get("descrizione")
|
|
compiti.append({"id": id_counter, "descrizione": d})
|
|
id_counter += 1
|
|
update_file()
|
|
return redirect("/ui")
|
|
|
|
@app.route("/form_delete")
|
|
def form_delete():
|
|
if not request.args.get("id"):
|
|
return "Errore: id mancante", 400
|
|
else:
|
|
id = int(request.args.get("id"))
|
|
for ciscomerda in compiti:
|
|
if ciscomerda["id"] == id:
|
|
compiti.remove(ciscomerda)
|
|
update_file()
|
|
return redirect("/ui")
|
|
return "Errore: compito non trovato", 404
|
|
|
|
app.run("0.0.0.0")
|