Browse Source

new flask

master
Jakub Škrabánek 1 month ago
parent
commit
34e468577b
  1. 83
      29_flask_calculator/main.py
  2. 65
      30_api_heroes/main.py

83
29_flask_calculator/main.py

@ -0,0 +1,83 @@
# python -m venv .venv
# .venv\scripts\activate
# pip install flask
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/")
def index():
return """
<ul>
<li>/secti/A/B</li>
<li>/odecti/A/B</li>
<li>/vynasob/A/B</li>
<li>/vydel/A/B</li>
<li>/mocnina/základ/exponent</li>
<li>/pozdrav/JMÉNO</li>
</ul>
"""
@app.route("/secti/<int:a>/<int:b>")
def add(a,b):
vysledek = a+b
return jsonify({
"operace":"soucet",
"vstup":{"a":a,"b":b},
"vysledek":vysledek
})
@app.route("/odecti/<int:a>/<int:b>")
def substrack(a,b):
vysledek = a-b
return jsonify({
"operace":"rozdíl",
"vstup":{"a":a,"b":b},
"vysledek":vysledek
})
@app.route("/vynasob/<int:a>/<int:b>")
def multiply(a,b):
vysledek = a*b
return jsonify({
"operace":"násobení",
"vstup":{"a":a,"b":b},
"vysledek":vysledek
})
@app.route("/vydel/<int:a>/<int:b>")
def divide(a,b):
if b == 0:
return jsonify({
"operace":"rozdil",
"vstup":{"a":a,"b":b},
"chyba": "Dělení nulou není povoleno!"
}), 400 #400 Bad Request
vysledek = a/b
return jsonify({
"operace":"rozdil",
"vstup":{"a":a,"b":b},
"vysledek":vysledek
})
@app.route("/mocnina/<int:zaklad>/<int:exponent>")
def power(zaklad,exponent):
vysledek = zaklad ** exponent
return jsonify({
"operace":"mocnina",
"zaklad": zaklad,
"exponent":exponent,
"vysledek":vysledek
})
@app.route("/pozdrav/<string:jmeno>")
def pozdrav(jmeno):
return f"Ahoj {jmeno}"
if __name__ == "__main__":
print("Server běží na http://localhost:80")
app.run(host="0.0.0.0", port=80, debug=True)

65
30_api_heroes/main.py

@ -0,0 +1,65 @@
from flask import Flask, jsonify
import random
app = Flask(__name__)
# AltGR + F|G = [|]
hrdinove = [
#{"jmeno":"","rasa":"","hp":100,"level":10},
{"jmeno":"Aragorn","rasa":"clovek","hp":100,"level":20},
{"jmeno":"Legolas","rasa":"elf","hp":80,"level":18},
{"jmeno":"Gimli","rasa":"trpaslik","hp":130,"level":21},
{"jmeno":"Frodo","rasa":"hobbit","hp":40,"level":5},
{"jmeno":"Gandalf","rasa":"clovek","hp":150,"level":50},
{"jmeno":"Sauron","rasa":"demon","hp":500,"level":100},
]
@app.route("/")
def index():
"""Hlavní stránka s rozcestníkem (HTML pro snadné klikání)"""
return """
<h1>RPG Heroes API Server</h1>
<ul>
<li>Všichni hrdninové: /api/heroes</li>
<li>Nahodný hrdina: /api/heores/random</li>
<li>Konkrétní hrdina: /api/heroes/ČÍSLO</li>
<li>filtrovat podle rasy (např.elf): /api/heroes/filter/elf</li>
</ul>
"""
@app.route("/api/heroes")
def get_all_heroes():
"""Vrátí celý seznam hrdinů jako JSON"""
return jsonify(hrdinove)
@app.route("/api/heroes/random")
def get_random_hero():
"""Vrátí náhodného hrdinu jako JSON"""
nahodny = random.choice(hrdinove)
return jsonify(nahodny)
@app.route("/api/heroes/<int:hero_id>")
def get_hero_by_id(hero_id):
"""Vrátí hrdinu podle jeho indexu v seznamu v poli(array)"""
if 0 <= hero_id < len(hrdinove):
return jsonify(hrdinove[hero_id])
else:
return jsonify({"chyba":"Hrdina s tímto ID neexistuje"}), 404
@app.route("/api/heroes/filter/<string:rasa>")
def filter_heores_by_race(rasa):
"""Vrátí hrdiny, kteří odpovídají zadané rase"""
vysledek = []
for hrdina in hrdinove:
if hrdina["rasa"].lower() == rasa.lower():
vysledek.append(hrdina)
if not vysledek:
return jsonify({"chyba":f"Žádný hrdina rasy '{rasa}'!"})
return jsonify(vysledek)
if __name__ == "__main__":
print("--- HERO API SERVER NASTARTOVÁN ---")
print("Server běží na http://localhost:80")
print("Vypnout server -> Ctrl + C")
app.run(host="0.0.0.0",port=80,debug=True)
Loading…
Cancel
Save