Eine kleine Kundendatenbank

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
BoOnOdY
User
Beiträge: 112
Registriert: Samstag 22. Juli 2006, 13:38

Hey Leute,
ich wollte mal spaßeshalber eine kleine Kundendatenbank mit HTML oberfläche und Python scripts und eventuell einer einbindung in zope gestalten. Hat jemand vieleicht schon ma eine programmiert, wo ich mir ein paar kniffe abgucken kann oder hat einer Lust mir zu sagen was ich so beachten muss?

Die Datenbank soll am Ende können:

Kunden anlegen
Aufträge zu Kunden anlegen
Rechungsausdruck mit vortlaufender Rechungsnummer und Kundenbezug

Ich würde damit anfangen ein Protokoll anzulegen in HTML und dann als übergabe ein Python script aufrufen

Freu mich schon auf die Antworten

Gruß Tim
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

BoOnOdY hat geschrieben:Ich würde damit anfangen ein Protokoll anzulegen in HTML und dann als übergabe ein Python script aufrufen
Kann ich grad gar nicht sagen, wie Du Dir das vorstellst. Ich würd vorschlagen, Du fängst einfach mal an und hältst uns auf dem Laufenden. :)
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
BoOnOdY
User
Beiträge: 112
Registriert: Samstag 22. Juli 2006, 13:38

Erste Frage:

Wie sieht ein Python script aus, das als "aktion" von einem Button in einem HTML Formular alle eingabefelder in eine PostgreSQL datenbank schreibt?
Am allerliesten mit dem Modul Psycopg2

Also so vom grundprinzip her?

Wir nehmen an wir haben einen Kundennamen in ein HTML protokoll eingetragen und einen Wohnort und ne Telefonnummer und die sollen dann in eine PostgreSQL datenbank übergeben werden und danach wieder angezeigt werden, dass sie erfolgreich eingetragen wurden.

Von mir aus sind auch Links im Forum erwünscht, wusst nur net so recht nach was ich suche sollte,
Gruß Tim
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

da musst du dich entdcheiden^^
es gibt viele systeme, die das für dich machen können...
http://www.cs.unm.edu/~dlchao/flake/doom/
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

BoOnOdY hat geschrieben:ich wollte mal spaßeshalber eine kleine Kundendatenbank mit HTML oberfläche und Python scripts und eventuell einer einbindung in zope gestalten.

Kunden anlegen
Aufträge zu Kunden anlegen
Rechungsausdruck mit vortlaufender Rechungsnummer und Kundenbezug
Hi Tim!

Von großen und kleinen Programmen

Bitte nimm es mir nicht krumm, aber jetzt komm zuerst mal eine riesige Portion Rechthaberei. Aber ich weiß nicht, wie ich das sonst so schreiben soll.

Du bist jetzt ganz am Anfang mit deiner Datenbankprogrammiererei. Deshalb mein gut gemeinter Tipp: Mache etwas kleines und plane **nicht** ein, das Programm später einmal mit mehr Power auszustatten. Kleine Adressdatenbank -- Ja. Aufträge und Rechnungen damit verwalten -- Nein.

Warum? Deine ersten paar Datenbankanwendungen, mit mehr als nur zwei oder drei Tabellen, brauchst du zum Testen der Möglichkeiten, zum Probieren und um dich in das System einzufühlen.

Ich habe noch niemanden getroffen, der seine zweite Datenbankanwendung auf die gleiche Art, wie seine erste Datenbankanwendung, schreiben würde. Es gibt da mehrere "Lehren". Die einen lassen der Datenbank mehr Macht und erstellen die Datenbank so, dass diese die eigentliche Hauptanwendung ist und sich um die Datenintegrität kümmert. Die anderen wollen so wenig Logik wie möglich an die Datenbank abgeben und schreiben eine umfangreiche Middleware. Die einen überlassen die Benutzerverwaltung und damit auch die Zugriffsverwaltung der Datenbank. Die anderen lassen die Middleware, die Zugriffsverwaltung übernehmen.

Alles hat seine Berechtigung. Nur du musst erst abschätzen lernen, was für deine Programme das Richtige ist. Und jetzt kommt das was ich eigentlich sagen wollte: Eine Kundendatenbank, mit der du auch Aufträge verwalten kannst, Rechnungen erstellen und ausdrucken kannst --> das ist keine kleine Datenbankanwendung die man spaßeshalber mal so nebenbei programmiert. Such dir ein überschaubares, kleines Beispiel. Definiere genau was damit gemacht werden kann. Und dann mach es. -- Aber bitte nicht mit dem Hintergedanken, aus dieser kleinen Anwendung später einmal etwas Großes machen zu wollen. Das geht nicht. Entweder du machst von Anfang an etwas Großes, mit allem was eine große Anwendung so braucht, oder du machst etwas Kleines.
Eine kleine Datenbankanwendung lässt sich recht schnell erstellen. Dabei lässt man die Dinge aber außer Acht, die für eine kleine Datenbankanwendung einfach nicht wichtig sind. Z.B. brauchst du dir bei einer kleinen Datenbankanwendung keine Gedanken darüber machen, wer von wo aus auf die Daten zugreifen darf. Du musst dir auch keine Gedanken über eine leichte Erweiterbarkeit deiner Anwendung zu machen. Du brauchst keine Programm-Mittelschicht, die die Logik deiner Anwendung für mehrere verschiedene Benutzeroberflächen (HTML, Kommandozeile, GUI,...) so aufbereitet, dass die Benutzeroberflächen sich nur um die Oberfläche kümmern müssen.

Es gibt natürlich noch mehr Dinge, die für eine zukünftig große, erweiterbare Anwendung zu berücksichtigen sind. Das alles fällt bei einer kleinen Anwendung weg. -- Aber nur dann, wenn man sich von vornherein Bewusst ist, dass es eine kleine, nicht erweiterbare Anwendung werden soll.
Hat man sich das vor Augen geführt, dann macht man sich keine Gedanken mehr über die verschiedensten Schichten eines Programmes, sondern programmiert in kürzester Zeit eine kleine Anwendung. Und erstaunlicherweise funktionieren diese kleinen Anwendungen meistens hervoragend. :-)

Eine Anwendung, die als CGI-Programm laufen soll, dann evt. zusätzlich noch in Zope -- das ist zwar machbar, aber macht keinen Sinn. Außgenommen, es soll eine "große" Anwendung werden. Dann kannst du mehrere Programmschichten einplanen. Eine Datenschicht, eine Mittelschicht für die Programmlogik und mehrere verschiedene Benutzerschnittstellen.

Nehmen wir mal an, du erstellst dir zuerst eine CGI-Anwendung, mit der du Kundenadressen anlegen, suchen und anzeigen kannst. Du hast das ganze so programmiert, dass schon beim Eingeben einer Postleitzahl, alle möglichen Orte aus einer Liste ausgewählt werden können. Umgekehrt geht das natürlich auch -- Schreibt man einen Ort in ein Feld, dann werden alle möglichen Postleitzahlen dieses Ortes vorgeschlagen. Beim Anlegen einer Adresse prüfst du auch nach, ob es eine Person mit ähnlichen Daten und dem gleichen Geburtstag bereits gibt. Wenn Ja, dann fragst du den Benutzer, ob die Adresse trotzdem angelegt werden soll. Diese Anwendung läuft dann ohne Umwege mit einem Webserver wie z.B. dem Apache zusammen. Die Rückgabe dieses Programmes ist HTML-Code, den der Apache an einen Browser übermitteln kann.

Danach möchtest du diese Anwendung auch in Zope laufen lassen. Die Prüfungen, die du beim Anlegen einer neuen Adresse machst, die musst du jetzt noch einmal programmieren, da deine CGI-Anwendung ja HTML zurück gibt und nicht Daten, die du in Zope verwenden könntest. Jetzt stehtst du da und musst dich entscheiden.

- CGI-Anwendung so umprogrammieren, dass man einen Parameter übergeben kann der dem CGI-Programm mitteilt, die Daten nicht als HTML-String sondern in einer anderen Form zurück zu geben.
- Mittelschicht programmieren, die sich um die Logik kümmert, die dann vom CGI-Programm eingebunden wird. Diese Mittelschicht kann dann auch von Zope aus eingebunden werden.
- Zope als Mittelschicht verwenden. Zope greift auf die Datenbank zu und stellt Funktionen zur Manipulation der Daten und Suche zur Verfügung. Vorteile: Zope hat eine Benutzer- und Zugriffsverwaltung eingebaut und ist von Haus aus ein XMLRPC-Server. Alle deine Benutzerschnittstellen können dann per XMLRPC auf die Logikschicht (Zope) zugreifen und mit den Daten arbeiten. Allerdings gibt es dann keinen Grund mehr, eine Benutzerschicht als CGI laufen zu lassen, da Zope das um ein Vielfaches besser kann.

@All: Viel Tobak, ich weiß. Bitte nehmt es mir nicht übel. Aber wo soll ich sonst so meine Programmierer-Gedanken los werden, wenn nicht hier im Python-Forum :P

lg
Gerold
:-)
Zuletzt geändert von gerold am Freitag 11. August 2006, 07:02, insgesamt 3-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

BoOnOdY hat geschrieben:Wie sieht ein Python script aus, das als "aktion" von einem Button in einem HTML Formular alle eingabefelder in eine PostgreSQL datenbank schreibt?
Hi Tim!

Was ist? Willst du mit CGI anfangen um ein Gefühl für die Internetprogrammierung zu bekommen? :-)

http://www.python-forum.de/post-42067.html#42067 Dort findest du den Link zu meinem gezippten Testordner. Verwende den einfachen Webserver von Jens und sieh dir mal die Beispiele "bmi.py" und "kleine_tabelle.py" an. So in etwa kannst du einfache Sachen mit CGI machen. Die Anwendung "cgi_info.py" zeigt dir an, welche Informationen du vom Webserver bekommst. Gibst du in einem HTML-Formular als "Action" ein CGI-Skript an, dann bekommst du vom HTML-Formular Daten übermittelt. Welche das sind, findest du mit "cgi_info.py" als Action heraus.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Hey Gerold, hab gerade mal hier rumgeschnüffelt.

...Das war doch mal ein WORT ;-)

Gute Nacht
JR
BlackJack

Soviel Wahres in Gerolds Ausführungen liegt -- eine Adressverwaltung ist vielleicht zu simpel. Bei einer relationalen Datenbank sollte man schon versuchen ein paar verknüpfte Tabellen zu modellieren. Vielleicht könnte BoOnOdY bei seinem ursprünglichen Vorhaben bleiben, allerdings dabei im Hinterkopf behalten, dass es eher ein Projekt ist, um aus Fehlern zu lernen.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

BlackJack hat geschrieben:eine Adressverwaltung ist vielleicht zu simpel. Bei einer relationalen Datenbank sollte man schon versuchen ein paar verknüpfte Tabellen zu modellieren.
Hi BlackJack!

Du hast vollkommen Recht. Zu klein darf das erste Projekt auch nicht sein. Wichtig ist dabei nur, im Hinterkopf zu behalten, dass es ein Projekt zum Lernen ist. :) Ich denke, wenn man später damit Geld verdienen möchte, dann sollte man das Programm lieber noch einmal schreiben. Dann kann man das neue Wissen, das man sich beim Programmieren des Lernprogramms angeeignet hat, sinnvoll in das neue Programm einbinden.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BoOnOdY
User
Beiträge: 112
Registriert: Samstag 22. Juli 2006, 13:38

So da fangen wir halt ma ganzzzzz unten an.

Grundsätzliche Module die ich brauche um mir eine kleine Adressdatenbank mit einer kleinen Benutzeroberfläche zu programmieren. Klein genug für den Anfang? ;)

Kleiner HTML Text

Code: Alles auswählen

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<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="Adress_script.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="Zuname" type="text" size="30" maxlength="40"></td>
    </tr>

    <tr>
      <td align="right">Ort:</td>
      <td><input name="Zuname" type="text" size="30" maxlength="40"></td>
    </tr>

    <tr>
      <td align="right">E-mail Adresse:</td>
      <td><input name="Zuname" type="text" size="30" maxlength="40"></td>
    </tr>

    <tr>
      <td align="right" valign="top">Zusätzliche Informationen:</td>
      <td><textarea name="Text" 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>
So dann muss ich wohl einen kleinen Python Script schreiben, der mir die Variablen übernimmt


Code: Alles auswählen

import psycopg2 

conn = psycopg2.connect(user = "Import", password = "import", database = "GBC") 
cur = conn.cursor() 

[i]Was kommt jetzt da rein um die Variablen aus der HTML an das Script zu übergeben und dann in die Datenbank zu schreiben???[/i]


f.close() 
cur.close() 
conn.close()

Ma danke für die kleine Standpauke ;) Aber wer immer so schnell und gut Hilft darf das auch ma :)

Trozdem bin ich ma so dreist und setz den Beitrag jetzt hier rein ;)

Noch ne kleine Frage:
Was ist dieses CGI ??
Wenn ich einfach das Script und die HTML in Zope includiere, kann ich das dann einfach benutzen?

Liebe Grüße
Tim

Edit by Gerold: HTML-Code in Code-Tags gesetzt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

BoOnOdY hat geschrieben:Was ist dieses CGI ??
Wenn ich einfach das Script und die HTML in Zope includiere, kann ich das dann einfach benutzen?
Hi Tim!

CGI steht für Common Gateway Interface und ist eine Technik die es erlaubt, Daten vom Webserver an ein, nicht zum Serverprozess gehörendes, Programm zu übergeben und von diesem externen Programm Daten zurück zu bekommen.

Dazu hinterlegt der Webserver Daten in den UMGEBUNGSVARIABLEN. Diese können dann vom aufgerufenen Programm ausgelesen werden. Alles was das aufgerufenen Programm an die Standardausgabe (STDOUT) schreibt, wird dann vom Webserver an den Browser zurück geliefert.

Das alles folgt einem vorgegebenen Protokoll. Man kann also sichtbare und unsichtbare Daten an den Browser zurück liefern lassen. Sichtbar ist z.B. der HTML-Quellcode. Unsichtbar sind z.B. Cookies oder andere Informationen im HTML-Header.

Zuerst schickt der Browser an den Webserver eine Datenanforderung (auch REQUEST genannt).
Der Webserver befüllt vorgegebene Umgebungsvariaben mit den Daten, die vom Browser kommen. Dann ruft der Webserver das externe Programm auf und wartet, bis der Prozess beendet ist.
Das externe Programm kann jetzt die Umgebungsvariablen auswerten. Dafür gibt es meist eigene Schnittstellen. Bei Python ist das Modul "cgi" dafür zuständig. Das erleichtert die Arbeit, ist aber nicht unbedingt nötig.
Ein CGI-Programm kann in jeder Programmiersprache geschrieben sein. Auch ein kompiliertes C-Programm oder ein Bash-Skript kann als CGI-Programm her halten.
Alles was jetzt das CGI-Programm an STDOUT (z.B. mit print) schreibt, wird vom Webserver an den Browser zurück geschickt.

Code: Alles auswählen

Browser --> Webserver --> externes CGI-Programm --> Webserver --> Browser
Alles weitere zum Thema CGI erfährst du, wenn du im Forum nach CGI-Themen suchst und dir die Beschreibung zum "cgi"-Modul durchliest.

CGI-Programmierung ist ein guter Einstieg in die Internetprogrammierung, aber sie ist nicht unbedingt für große Projekte geeignet. Ein Internet-Forum würde ich nie als CGI-Projekt erstellen. Dafür ist CGI einfach zu "low level". Um dir die Arbeit für größere Projekte zu erleichtern, gibt es dann die Web-Frameworks und Web-Applikationsserver wie z.B. Django oder Zope.

Zope und CGI sind zwei verschiedene Techniken. Entweder man programmiert CGI oder man programmiert Zope. Es hat aber noch niemandem geschadet, zuerst mal CGI kennen zu lernen. Außerdem reicht CGI für viele kleine Projekte komplett aus. Man muss ja nicht alles so programmieren, dass es groß skalierbar und erweiterbar ist. Nur um ein Gästebuch in eine Website zu integrieren, würde niemand extra ein Web-Framework installieren.

Jetzt wirst du fragen, warum man nicht alles mit CGI machen soll.

Die Antwort sind mehrere...
Zuerst mal ist CGI langsamer als andere Techniken, da für jede Anfrage vom Webserver ein neuer Prozess geöffnet wird. Zehn Anfragen eines Browsers bedeutet, dass zehn mal das CGI-Programm neu gestartet werden muss.
CGI ist sehr "low level". Man muss sich um alles selber kümmern. Cookies, Session-Variablen, Benutzeridentifizierung, Zugriffsverwaltung... Außerdem muss alles was man so an den Webserver zurück schicken möchte per "print" an STDOUT geschrieben werden. Es wäre aber viel einfacher, wenn man nur ein paar Vorlagen hätte, die mit den Daten befüllt werden und nicht alles mit "print" zusammensetzen müsste.

Web-Frameworks kümmern sich um diese Dinge, haben entweder eine eigene Vorlagensprache eingebaut oder können diese zumindest direkt verwenden und sind meist schneller als CGI, da diese, wenn der Webserver so eingerichtet wurde, nicht bei jeder Anfrage neu gestartet werden müssen.

Es gibt mehrere Möglichkeiten, wie erreicht wird, dass nicht immer ein neuer Prozess aufgerufen werden muss. Oft läuft das Web-Framework als eigenständiges Serverprogramm im Hintergrund und wartet auf Anfragen vom Webserver. Oft ist es aber auch so, dass das Webframework in den Prozess des Webservers eingebunden wird. Das geht beim Apachen z.B. über "mod_python" oder "FastCGI".

Diese Techniken sind aber auch wieder so "low level", dass man darüber eine Programmschicht gestellt hat. -- WSGI. Darüber kann ich dir aber nicht viel erzählen, da ich WSGI noch nie eingesetzt habe.

Fazit: CGI sollte man kennen lernen. Zope und andere Web-Frameworks sollte man kennen lernen. Dann kann man sich das jeweils Beste für ein Projekt raussuchen.

Leider gibt es viel zu viele Webframeworks für Python. Da hilft nur, sich zu informieren, ein paar Frameworks auszuprobieren und später zu entscheiden, in welches Framework man sich intensiver einarbeiten will. :-(

Hier eine Liste der, aus meiner Sicht, interessantesten Frameworks und Vorlagensprachen:
- Zope http://zope.org
- Rest2Web http://www.voidspace.org.uk/python/rest2web/
- SimpleTAL http://www.owlfish.com/software/simpleTAL/

"Andere Leute" werden dir "andere Frameworks" und Vorlagensprachen empfehlen. -- Es gibt einfach zu viele davon und jeder glaubt für sich, mit dem Besten zu arbeiten. -- Ich natürlich auch... :D

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Teil 1:

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">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>
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Teil 2:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-


# CREATE TABLE addresses
# (
#   id serial NOT NULL,
#   vorname text,
#   zuname text,
#   strasse text,
#   ort text,
#   email text,
#   info text,
#   CONSTRAINT pk_addresses PRIMARY KEY (id)
# ) 
# WITHOUT OIDS;
# ALTER TABLE addresses OWNER TO zopetest;


print "Content-Type: text/html;charset=iso-8859-1"
print

import cgi
import cgitb; cgitb.enable()
import psycopg2


# Connection öffnen
conn = psycopg2.connect(
    user = "zopetest", password = "zopetest", database = "zopetest"
)
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)
email = fs.getvalue("email", None)
info = fs.getvalue("info", None)

# Neuen Datensatz anlegen
sql = """
INSERT INTO addresses (
    vorname,
    zuname,
    strasse,
    ort,
    email,
    info
) VALUES (
    %(vorname)s,
    %(zuname)s,
    %(strasse)s,
    %(ort)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()


lg
Gerold
:-)
Zuletzt geändert von gerold am Freitag 11. August 2006, 10:08, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BoOnOdY
User
Beiträge: 112
Registriert: Samstag 22. Juli 2006, 13:38

Hey, ich möchte ja nix ins Internet stellen, das sollen alles locale Programme werden im Moment.
Soll alles auf einem PC laufen nur für mich, und wenn ich ma von auswärts ne adresse haben will geh ich übern laptop via VPN auf meinen PC und dann kann ich auch zope öffnen.

Ich will ja eigentlich nur jetzt sozusagen eine Computerinterne Adressdatenbank schreiben.


Ich hab gerade nicht so viel zeit werde mir aber heute abend ma ganz in ruhe alles über CGI sowohl von dir als auch aus dem Forum durchlesen.

Nur ich will halt schon mal ein bisschen Informationen sammeln, die ich dann heute Abend verarbeiten kann.

Is bei mir immer so( nur zur erklärung)
Ich denk mir was aus, frag leute wie sie es lösen würden oder was sie für Erfahrungen gemacht haben
(Sehr gerne auch ein fertiger Quelltext)
Dann arbeite ich mich Abends da ein und eigne mir die Befehle die im Quelltext und die logigen die benutzt wurden an.
So kann ich die weiteren aufgaben und veränderungen dann selbst vornehmen oder auch ein ähnliches Projekt alleine gestalten.




Vielen Dank :)
BoOnOdY
User
Beiträge: 112
Registriert: Samstag 22. Juli 2006, 13:38

Hy

wenn ich das mal in Zope importiere dann:
Site Error

An error was encountered while publishing this resource.

Error Type: ImportError
Error Value: import of "cgitb" is unauthorized

Troubleshooting Suggestions

* The URL may be incorrect.
* The parameters passed to this resource may be incorrect.
* A resource that this resource relies on may be encountering an error.

For more detailed information about the error, please refer to the error log.

If the error persists please contact the site maintainer. Thank you for your patience.

und wenn ich es so zusammen in einem Ordner ausführe:
print "Content-Type: text/html;charset=iso-8859-1" print import cgi import cgitb; cgitb.enable() import psycopg2 # Connection öffnen conn = psycopg2.connect( user = "Tim", password = "haker4life", 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) email = fs.getvalue("email", None) info = fs.getvalue("info", None) # Neuen Datensatz anlegen sql = """ INSERT INTO addresses ( vorname, zuname, strasse, ort, email, info ) VALUES ( %(vorname)s, %(zuname)s, %(strasse)s, %(ort)s, %(email)s, %(info)s ); """ cur.execute(sql, locals()) conn.commit() # Meldung zurück geben print """
Fertig

Die neue Adresse wurde erstellt.

Vorname: %(vorname)s
Nachname: %(zuname)s
""" % locals() # Connection schließen cur.close() conn.close()

erkennt er wohl net ??

Oder hab ich was nicht berücksichtigt??

Viele Grüße :):):) Tim
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

BoOnOdY hat geschrieben: Ich hab gerade nicht so viel zeit werde mir aber heute abend ma ganz in ruhe alles über CGI sowohl von dir als auch aus dem Forum durchlesen.

[...]
Nur ich will halt schon mal ein bisschen Informationen sammeln, die ich dann heute Abend verarbeiten kann.

Is bei mir immer so( nur zur erklärung)
Ich denk mir was aus, frag leute wie sie es lösen würden oder was sie für Erfahrungen gemacht haben
(Sehr gerne auch ein fertiger Quelltext)
Dann arbeite ich mich Abends da ein und eigne mir die Befehle die im Quelltext und die logigen die benutzt wurden an.
Nix für ungut, aber auf mich macht es einfach den Eindruck, als hättest Du nur keinen Bock Dir die Doku durchzulesen. gerold hat Dir echt jede Menge Ansätze geliefert und dabei auch viel Hintergrundwissen vermittelt, das weit über das Thema Python hinaus geht; vom Thema Datenbanken ganz zu schweigen.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

BoOnOdY hat geschrieben:wenn ich das mal in Zope importiere dann:
[...]
erkennt er wohl net ??
Oder hab ich was nicht berücksichtigt??
Hi Tim!

Viel schlimmer. Du hast die Unterschiede nicht verstanden.

Lies diesen, kompletten Thread doch bitte noch einmal aufmerksam durch. Es wurde bereits alles erklärt. ``CGI != Zope``

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BoOnOdY
User
Beiträge: 112
Registriert: Samstag 22. Juli 2006, 13:38

So weit, so gut.
Also Brauche ich
-Meine HTML oberfläche
-Ein Python Script
- Zope
(ich will das alles mit zope gleich machen)
So weit richtig?

Ich füge meine HTML datei in Zope ein und den Script auch als "Python datei"
?

Gibts irgendwo ein paar tutorials, in denen beschrieben wird, wie die variable an Zope und und von Zope wieder zurück gegeben wird?

gehe ich recht in der Anname, dass ich dann ein "psycopg2" Importieren kann in Zope und eine dauerhafte Verbindung mit der Datenebank dadurch herstellen kann? und das nicht jedes mal im Python script erwähnen muss?

Find ich auch ein gutes Python-Zope-HTML tutorial irgenwo?

Liebe Grüße Tim
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
BoOnOdY
User
Beiträge: 112
Registriert: Samstag 22. Juli 2006, 13:38

Okay da steht ne Definition aber mehr net ...
Antworten