Hallo Jungs,
danken für die Antwort und Erklärung!
Hallo Jungs und vielen Dank für eure Antwort sowie Erklärung.
Bezieht sich dies auf meine Frage, wie ich den Link beziehungsweise die Funktion als action korrekt angebe, ergo auf Tutorial 4 in den CherryPy Tutorials? Diese habe ich vor ca. 1.5 Wochen durchgearbeitet und den Link ja auch dementsprechend gesetzt (siehe meinen Ausgangspost). Habe dabei sowohl <form action="/saveCustomer"> als auch die Version ohne Backslash vor dem Funktionsnamen gesetzt.
Drücke ich dann auf den Submit Button, spuckt mir CherryPy leider immer folgenden Fehler.
Code: Alles auswählen
The path '/saveKunde' was not found.
………
cherrypy._cperror.NotFound: (404, "The path '/saveKunde' was not found.")
Er hat application.py ja auch als Ausgangspunkt, heißt er findet die Methode saveKunde ja nicht, da sind in database.py ist. Müsste er an sich ja auch nicht, da die Funktion ja nur im Hintergrund arbeitet und er anschließend zum Beispiel zur Kundenübersicht zurückkehren kann. Bin grad aber irgendwie doch sehr überfragt, wie ich dies bewerkstelligen soll, da noch recht neu in der Materie.
snafu hat geschrieben: Donnerstag 25. Oktober 2018, 17:52
Du brauchst auch den Query-String nicht selbst zu parsen, sondern baust einfach die passenden Argumente ein. Oder alternativ ginge auch **kwargs in der Funktionssignatur.
Mit **kwargs sollte ich die einzelnen Key:Value Paare aus der URL/URI dann einfach per Index-Operator [] ansprechen können und diese dann mit JSON.dump speichern, korrekt? Ich denke die Variante mit dem Einbauen der Argumente ist schöner, wüßte grad allerdings noch nicht genau, wie das im Code aussehen würde. Das teste ich, sobald die Verarbeitung mit dem action korrekt funktioniert.
Sirius3 hat geschrieben: Donnerstag 25. Oktober 2018, 18:02
Wie sieht denn Dein gesamter Code aus? Wo ist das `@cherrypy.expose`?
Im Folgenden mal mein gesamter, relevanter Code. Durch das Copy und Paste sind die Einrückungen irgendwie verloren gegangen, der Code ist aber im Original korrekt formatiert.
Application.py:
Code: Alles auswählen
from pathlib import Path
import cherrypy
from . import view
from . import database
class Application:
def __init__(self):
self.views = view.View_cl(Path().absolute())
self.database = database.Database_cl()
@cherrypy.expose
def index(self):
return self.views.getIndex()
@cherrypy.expose
def Kunden(self):
data = self.database.getKunden()
return self.views.getKundenListe(data)
@cherrypy.expose
def createKunde(self):
data = {}
return self.views.createKunde(data)
Databse.py:
Code: Alles auswählen
import os
import codecs
import json
from cherrypy.lib.httputil import parse_query_string
class Database_cl:
def __init__(self):
self.pathToData = "Der Pfad zu den Daten"
self.pathToKunden = os.path.join(self.pathToData, "Kunden")
self.kunden_data = {}
def saveKunde(self): #Das wäre dann ja noch nicht korrekt, da ich der Methode ja entweder die Argumente direkt übergebe oder es per **kwargs löse
newKunde = parse_query_string(cherrypy.request.query_string)
with open('kunden.json', 'w') as outfile:
json.dump(newKunde, outfile)
View.py (Hier wird nur das entsprechende Mako-Template aufgerufen. Die entsprechenden Methoden create etc. waren vorgegeben):
Code: Alles auswählen
def createKunde(self, data):
return self.create('createKunde.tpl', data)
Das Formular ist ja im Ausgangspost zu finden. Danke für die restlichen Hinweise hinsichtlich der Konventionen!
Lieben Gruß und ein angenehmes Wochenende!