Eine kleine Kundendatenbank
*PLONK*
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
Du solltest besser erst ein wenig Python üben bevor Du Dich an so ein grosses Framework wie Zope heranwagst.
Eine wichtige Sache beim Entwurf von Programmen ist, dass man unabhängige Ebenen nicht vermischt. Zum Beispiel sollte man immer versuchen die Benutzeroberfläche von der Programmlogik zu trennen und manchmal ist es auch sinnvoll Programmlogik und Datenhaltung wirklich streng zu trennen. Vor allem wenn Du mit einer Datenbank arbeiten willst. Dann ist die Datenhaltung von der Natur der Sache her schon etwas externes, eigenes.
Ich würde folgendes Vorgehen vorschlagen: Entwirf die Datenbank. Also mach Dir Gedanken was für Daten für Deine Anwendung wichtig sind und in welchen Tabellen sie gespeichert werden sollen.
Dann brauchst Du Code der diese Daten in die Datenbank schreibt, von dort ausliest und bestimmte Operationen wie suchen oder löschen erlaubt. Schreibe dazu Klassen und Funktionen die Du dann erst einmal mit Testcode und oder in der Python-Shell ausprobieren kannst.
Dann kannst Du auf diesen Funktionen und Klassen Code aufsetzen, der das ganze mit einer Benutzeroberfläche verbindet. Hier sollten Dir jetzt alle Möglichkeiten offen stehen. Einfache Textoberfläche, Tkinter, eines der externen GUI Frameworks, CGI. usw.
Oder Du arbeitest Dich in Zope ein. Das ist eine Welt für sich und da bietet es sich wahrscheinlich auch an die mitgelieferte objektorientierte Datenbank (zodb) zu benutzen. Die kann man übrigens auch einzeln installieren und ausserhalb von Zope verwenden.
Eine wichtige Sache beim Entwurf von Programmen ist, dass man unabhängige Ebenen nicht vermischt. Zum Beispiel sollte man immer versuchen die Benutzeroberfläche von der Programmlogik zu trennen und manchmal ist es auch sinnvoll Programmlogik und Datenhaltung wirklich streng zu trennen. Vor allem wenn Du mit einer Datenbank arbeiten willst. Dann ist die Datenhaltung von der Natur der Sache her schon etwas externes, eigenes.
Ich würde folgendes Vorgehen vorschlagen: Entwirf die Datenbank. Also mach Dir Gedanken was für Daten für Deine Anwendung wichtig sind und in welchen Tabellen sie gespeichert werden sollen.
Dann brauchst Du Code der diese Daten in die Datenbank schreibt, von dort ausliest und bestimmte Operationen wie suchen oder löschen erlaubt. Schreibe dazu Klassen und Funktionen die Du dann erst einmal mit Testcode und oder in der Python-Shell ausprobieren kannst.
Dann kannst Du auf diesen Funktionen und Klassen Code aufsetzen, der das ganze mit einer Benutzeroberfläche verbindet. Hier sollten Dir jetzt alle Möglichkeiten offen stehen. Einfache Textoberfläche, Tkinter, eines der externen GUI Frameworks, CGI. usw.
Oder Du arbeitest Dich in Zope ein. Das ist eine Welt für sich und da bietet es sich wahrscheinlich auch an die mitgelieferte objektorientierte Datenbank (zodb) zu benutzen. Die kann man übrigens auch einzeln installieren und ausserhalb von Zope verwenden.
Hy,
also der erste Punkt:
Ich brauche 2 tabellen:
1. Kontakttabelle
Kontaktnummer
Vorname
Nachname
Straße+nummer
Ort mit PLZ
Telefonnummer
Mobilnummer
Emailadresse
Ereignisverzeichnis (ne nummer der Ereignisse die mit der Person gelplant sind aus Tabelle2 die immer mit einem Komma abgetrennt werden)
2.Ereignistabelle
Ereignisnummer
Kontaktnummer
Ereignis name
Freie Beschreibung
So weit so gut, werd mich dann ma die Tage drann machen den Code von Gerold zu verstehen und ihn für meine Anwendungen selbst zu schreiben.
Werd ihn dann hier reinstellen und dann könnt ihr ja mal nach Denkfehlern gucken.
Wenn jemandem ein Denkfehler in den beiden Tabellen auffällt, bitte auch anmerken,
Danke
gruß Tim
also der erste Punkt:
Ich brauche 2 tabellen:
1. Kontakttabelle
Kontaktnummer
Vorname
Nachname
Straße+nummer
Ort mit PLZ
Telefonnummer
Mobilnummer
Emailadresse
Ereignisverzeichnis (ne nummer der Ereignisse die mit der Person gelplant sind aus Tabelle2 die immer mit einem Komma abgetrennt werden)
2.Ereignistabelle
Ereignisnummer
Kontaktnummer
Ereignis name
Freie Beschreibung
So weit so gut, werd mich dann ma die Tage drann machen den Code von Gerold zu verstehen und ihn für meine Anwendungen selbst zu schreiben.
Werd ihn dann hier reinstellen und dann könnt ihr ja mal nach Denkfehlern gucken.
Wenn jemandem ein Denkfehler in den beiden Tabellen auffällt, bitte auch anmerken,
Danke
gruß Tim
- DatenMetzgerX
- User
- Beiträge: 398
- Registriert: Freitag 28. April 2006, 06:28
- Wohnort: Zürich Seebach (CH)
1. Kontakttabelle
Kontaktnummer
Vorname
Nachname
Straße+nummer
Ort mit PLZ
Telefonnummer
Mobilnummer
Emailadresse
2.Ereignistabelle
Ereignisnummer
Kontaktnummer
Ereignis name
Freie Beschreibung
Sollte so genügen... WEnn du alle Ereignisse von einem Benutzer willst (oder Kontakt) machst du ein "Select from * from Ereignisstabelle where Kontaktnummer = %id" % aktuelleid
Kontaktnummer
Vorname
Nachname
Straße+nummer
Ort mit PLZ
Telefonnummer
Mobilnummer
Emailadresse
2.Ereignistabelle
Ereignisnummer
Kontaktnummer
Ereignis name
Freie Beschreibung
Sollte so genügen... WEnn du alle Ereignisse von einem Benutzer willst (oder Kontakt) machst du ein "Select from * from Ereignisstabelle where Kontaktnummer = %id" % aktuelleid
keine sql-injection, bitte
erst gar nicht damit anfangen...
erst gar nicht damit anfangen...
http://www.cs.unm.edu/~dlchao/flake/doom/
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Tim!
Ich habe auch noch einen Rat für dich:
Verwende bei Tabellennamen und Feldnamen keine Umlaute, keine Leerzeichen und keine Sonderzeichen. Idealerweise auch keine Großschreibung.
lg
Gerold
Ich habe auch noch einen Rat für dich:
Verwende bei Tabellennamen und Feldnamen keine Umlaute, keine Leerzeichen und keine Sonderzeichen. Idealerweise auch keine Großschreibung.
lg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
So die erste Tabelle
der id serial wird dann zur Kundennumer/Kontaktnummer
Hier das leicht abgeänderte HTML
Und da noch der leicht abgeänderte Script der ursprünglich von Gerold kam
Fehler suchen erwünscht
Das wäre die Datei zum Kunden anlegen so weit.
Kleine Frage, es gibt doch so ein Zope Modul zur Suche von Daten
Würde das auch mit einer Maske funktionieren die man als "Kundensuche" ausbaut ?
Weil man muss ja als nächstes die eingetragenen Daten verwalten und suchen.
Ich mach mich jetzt drann die Sachen für den Ereignis bereich zu machen, das kann ich ja auch noch mit den Sachen die ich jetzt schon von euch gelernt hab.
Wie würde man es machen auf die Daten in der Datenbank zuzugreifen mit python script und HTML?
Wir sagen jetzt z.B.:
Ich gebe in ein HTML feld eine Kundennummer ein, und will dann die Daten zu dem Kunden agezeigt bekommen.
Danke schon ma
Tim
der id serial wird dann zur Kundennumer/Kontaktnummer
Code: Alles auswählen
CREATE TABLE Kunden (
Kundennummer serial PRIMARY KEY,
vorname text,
zuname text,
Strasse text,
ort text,
telefon text,
mobil text,
email text,
info text,
historie text,
) WITHOUT OIDS;
Hier das leicht abgeänderte HTML
Code: Alles auswählen
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title>Kleine Adressdatenbank</title>
</head>
<body>
<h1>Füllen sie bitte folgende Felder aus</h1>
<p>Bitte füllen sie alle Felder rücksichstvoll aus</p>
<form action="add_address.py">
<table border="0" cellpadding="5" cellspacing="0" bgcolor="#E0E0E0">
<tr>
<td align="right">Vorname:</td>
<td><input name="vorname" type="text" size="30" maxlength="30"></td>
</tr>
<tr>
<td align="right">Nachname:</td>
<td><input name="zuname" type="text" size="30" maxlength="40"></td>
</tr>
<tr>
<td align="right">Straße:</td>
<td><input name="strasse" type="text" size="30" maxlength="40"></td>
</tr>
<tr>
<td align="right">Ort:</td>
<td><input name="ort" type="text" size="30" maxlength="40"></td>
</tr>
<tr>
<td align="right">Telefonnummer:</td>
<td><input name="telefon" type="text" size="30" maxlength="40"></td>
</tr>
<tr>
<td align="right">Handynummer:</td>
<td><input name="mobil" type="text" size="30" maxlength="40"></td>
</tr>
<tr>
<td align="right">E-mail Adresse:</td>
<td><input name="email" type="text" size="30" maxlength="40"></td>
</tr>
<tr>
<td align="right" valign="top">Zusätzliche Informationen:</td>
<td><textarea name="info" rows="10" cols="50"></textarea></td>
</tr>
<tr>
<td align="right">Kunde eintragen:</td>
<td>
<input type="submit" value=" Eintragen ">
<input type="reset" value=" Abbrechen">
</td>
</tr>
</table>
</form>
</body>
</html>
Code: Alles auswählen
print "Content-Type: text/html;charset=iso-8859-1"
print
import cgi
import cgitb; cgitb.enable()
import psycopg2
# Connection öffnen
conn = psycopg2.connect(
user = "Import", password = "Import", database = "GBC"
)
cur = conn.cursor()
# Feldwerte ermitteln
fs = cgi.FieldStorage()
vorname = fs.getvalue("vorname", None)
zuname = fs.getvalue("zuname", None)
strasse = fs.getvalue("strasse", None)
ort = fs.getvalue("ort", None)
telefon = fs.getvalue("telefon", None)
mobil = fs.getvalue("mobil", None)
email = fs.getvalue("email", None)
info = fs.getvalue("info", None)
# Neuen Datensatz anlegen
sql = """
INSERT INTO Kunden (
vorname,
zuname,
strasse,
ort,
telefon,
mobil,
email,
info,
) VALUES (
%(vorname)s,
%(zuname)s,
%(strasse)s,
%(ort)s,
%(telefon)s,
%(mobil)s,
%(email)s,
%(info)s
);
"""
cur.execute(sql, locals())
conn.commit()
# Meldung zurück geben
print """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title>Kleine Adressdatenbank</title>
</head>
<body>
<h1>Fertig</h1>
<p>
Die neue Adresse wurde erstellt.
</p>
<p>
<strong>Vorname:</strong> %(vorname)s <br>
<strong>Nachname:</strong> %(zuname)s
</p>
</body>
</html>""" % locals()
# Connection schließen
cur.close()
conn.close()
Das wäre die Datei zum Kunden anlegen so weit.
Kleine Frage, es gibt doch so ein Zope Modul zur Suche von Daten
Würde das auch mit einer Maske funktionieren die man als "Kundensuche" ausbaut ?
Weil man muss ja als nächstes die eingetragenen Daten verwalten und suchen.
Ich mach mich jetzt drann die Sachen für den Ereignis bereich zu machen, das kann ich ja auch noch mit den Sachen die ich jetzt schon von euch gelernt hab.
Wie würde man es machen auf die Daten in der Datenbank zuzugreifen mit python script und HTML?
Wir sagen jetzt z.B.:
Ich gebe in ein HTML feld eine Kundennummer ein, und will dann die Daten zu dem Kunden agezeigt bekommen.
Danke schon ma
Tim
Zuletzt geändert von BoOnOdY am Montag 14. August 2006, 14:34, insgesamt 2-mal geändert.
So hier das gleiche noch ma für die ereignisse, ich nenn se standesgemäß ma Tickets:
Ich würds gerne so machen:
Man sucht sich einen Kunden, dann wird der angeziegt, über nen Button kommt man dann auf diese Seite und hat die Kundendaten angezeigt ( hab da ma im HTML code nen Platzhalter hin gemacht)
Hab mir das so ausgedacht:
Mit der Implementierung in Zope zum suchen von Datensätzen, kann man über eine Oberfläche den Kunden suchen, dann gehen seine Daten auf und dann gibts auf der seite halt den kleinen Button.
Hier dann schon ma die seite und der script für diese Seite.
Viele Grüße
Tim
Ich würds gerne so machen:
Man sucht sich einen Kunden, dann wird der angeziegt, über nen Button kommt man dann auf diese Seite und hat die Kundendaten angezeigt ( hab da ma im HTML code nen Platzhalter hin gemacht)
Hab mir das so ausgedacht:
Mit der Implementierung in Zope zum suchen von Datensätzen, kann man über eine Oberfläche den Kunden suchen, dann gehen seine Daten auf und dann gibts auf der seite halt den kleinen Button.
Hier dann schon ma die seite und der script für diese Seite.
Viele Grüße
Tim
Code: Alles auswählen
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title>Kleine Adressdatenbank</title>
</head>
<body>
<h1>Füllen sie bitte folgende Felder aus</h1>
<p>Bitte füllen sie alle Felder rücksichstvoll aus</p>
************** PLATZ FÜR DEN KUNDENBEZUG, DATEN AUS DER TABELLE KUNDEN AUSLESEN UND HIER HEREINSCHREIBEN***********
<form action="Ticket.py">
<table border="0" cellpadding="5" cellspacing="0" bgcolor="#E0E0E0">
<tr>
<td align="right">Kundennummer:</td>
<td><input name="Kundennummmer" type="text" size="30" maxlength="30"></td>
</tr>
<tr>
<td align="right">Betriebssystem:</td>
<td><input name="OS" type="text" size="30" maxlength="30"></td>
</tr>
<tr>
<td align="right" valign="top">Beschreibung:</td>
<td><textarea name="details" rows="10" cols="50"></textarea></td>
</tr>
<tr>
<td align="right">Auftrag:</td>
<td>
<input type="submit" value=" Entgegen nehmen ">
<input type="reset" value=" Verwerfen">
</td>
</tr>
</table>
</form>
</body>
</html>
Code: Alles auswählen
print "Content-Type: text/html;charset=iso-8859-1"
print
import cgi
import cgitb; cgitb.enable()
import psycopg2
# Connection öffnen
conn = psycopg2.connect(
user = "Import", password = "Import", database = "GBC"
)
cur = conn.cursor()
# Feldwerte ermitteln
fs = cgi.FieldStorage()
Kundennummer = fs.getvalue("Kundennummer", None)
OS = fs.getvalue("OS", None)
details = fs.getvalue("details", None)
# Neuen Datensatz anlegen
sql = """
INSERT INTO Ticket (
Kundennummer,
OS,
details,
) VALUES (
%(Kundennummer)s,
%(OS)s,
%(details)s,
);
"""
cur.execute(sql, locals())
conn.commit()
# Meldung zurück geben
print """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title>Kleine Adressdatenbank</title>
</head>
<body>
<h1>Fertig</h1>
<p>
Die neue Anfrage wurde erstellt.
</p>
<p>
<strong>Kundennummer:</strong> %(Kundennummer)s
</p>
</body>
</html>""" % locals()
# Connection schließen
cur.close()
conn.close()
Code: Alles auswählen
CREATE TABLE Ticket (
Ereignisnummer serial PRIMARY KEY,
Kundennummer int4,
OS text,
details text,
) WITHOUT OIDS;