ich bin neu beim Thema Webentwicklung, Python/Flask, und auch in diesem Forum.
Meine Anwendung soll einerseits HTML für den Browser ausliefern, aber auch von einer .NET Desktopanwendung angesprochen werden können.
Von der Desktopanwendung aus sollen registrierte User "Shapes" und "Stencils" publizieren können.
Ein Shape besteht aus einigen Texteigenschaften und einer PNG Datei.
Ein Stencil hat eigene Eigenschaften, eine Binärdatei, und viele Shapes.
Nur registrierte User können Shapes und Stencils herunterladen.
Dank Hilfe einiger Tutorials funktioniert bereits:
* Webseite bereitstellen
* Benutzer registrieren
* Publizieren von Shapes aus der .NET Applikation
* Download nur für registrierte User (mit Flask-Login)
Die API für "addShape" sieht (vereinfacht) so aus:
Code: Alles auswählen
@bp.route("/addShape", methods=['POST'])
def addShape():
try:
file = request.files['image']
newShape = Shape(
name = request.form['name'],
prompt = request.form['prompt'],
keywords = request.form['keywords'],
dataObject = request.form['dataObject'])
db.session.add(newShape)
db.session.commit()
filename = f"{newShape.id}.png"
file.save(os.path.join(os.path.abspath('app/static/images'), filename))
except Exception as e:
return jsonify({"message": str(e)}), 400
return jsonify({"message": "Shape added"}), 201
Meine Idee wäre es, Email und Passwort bei jedem Request als Eigenschaften mitzuliefern und dies ohne Flask-Login zu behandeln.
AddShape soll ja ausschließlich von der Anwendung aus angesprochen werden, und nicht vom Browser.
Mein Problem ist aber, dass diese Eigenschaften statische Key/Value Paare in request.form sind.
Das finde ich so schon nicht elegant. Aber spätestens für "addStencil" muss es dynamisch sein, da ein Stencil ja eine variable Anzahl an Shapes enthält.
Daher würde ich das gerne mit JSON machen.
Dies würde dann ein User-Objekt, ein Stencil-Objekt, sowie ein Array von Shape-Objekten enthalten.
Außerdem würden dem Request noch je ein PNG pro Shape und eine Binärdatei für das Stencil anhängen.
(Insgesamt reden wir hier von 1..10MB, falls das wichtig ist.)
All meine Versuche das so abzubilden sind bisher gescheitert.
Ich weiß auch nicht, ob der Fehler am Python-, oder am NET-Code liegt.
Zwar kann ich etwas basteln was teilweise geht, aber das fühlt sich nicht gut an.
Außerdem denke ich, dass die API von Anfang an stabil sein sollte.
Daher würde ich euch einmal um Hilfe bitten die Python-Seite vernünftig festzulegen.
So in etwa stelle ich mir das vor:
Code: Alles auswählen
@bp.route("/addStencil", methods=['POST'])
def addStencil():
try:
o = json.load(request.json)
print(o.User.Email)
print(o.Stencil.Name)
for shape in o.Shapes:
print(shape.Name)
for file in request.files:
print(file.filename)
except Exception as e:
return jsonify({"message": str(e)}), 400
return jsonify({"message": "Stencil added"}), 201
Gruß,
Thomas