ich möchte mal den zwischenstand zu meinem shop auf meiner seite http://crossoverguitar.weberanto.net präsentieren. zuerst dachte ich, ich mach das erst wenn alles fertig ist, lol, dann wird es nie gezeigt. so ein shop zieht nämlich einen echten rattenschwanz hinter sich her, und jetzt ist er mal zumindest funktional und hat schon das eine oder andere erfreuliche feature:
zuerst zur htmlseite, die aufgerufen wird, wenn man im menü shop auswählt:
Code: Alles auswählen
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Shop</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Content-Language" content="de">
<link rel="stylesheet" type="text/css" href="sheet1.css">
</head>
<body background="_themes/kopie-von-sumi-malerei/sumtextb.jpg" bgcolor="#FFFFFF" text="#000000" link="#000000" vlink="#666699" alink="#990099" >
<div align="center">
<div style="width:555; margin-top:50px; text-align:justify">
<h2 style="font-family:Arial, Helvetica">...willkommen im Crossover Shop</h2>
<form method="get" action="../cgi-bin/shop.py">
<p class="text"><input type="text" name="cd" value="" size='2' maxlength='2'>CD, pro St&ck 10 EUR<br></p>
<p class="text"><input type="text" name="funkythings" value="" size='2' maxlength='2'>three funky things, pro St&ck 12 EUR<br></p>
<p class="text"><input type="text" name="groovystudies" value="" size='2' maxlength='2'>five groovy studies, pro St&ck 15 EUR<br></p>
<p class="text"><input type="text" name="shirt" value="" size='2' maxlength='2'>Crossover T-Shirt, pro St&ck 20 EUR<br>&<br>&<br></p>
<p class="text"><input type="Submit" value="weiter"></p>
</form>
</div>
</div>
<!--#include file="impressum.htm" -->
</body>
</html>
Code: Alles auswählen
#!/usr/local/bin/python
import sys
sys.path.append('/var/www/web188/html/cgi-bin/module')
from webtools import *
from seiten import FormularSeite, ShopSeite
link='zum Shop'
#Der Shop mit Artikel und Preise pro Stueck
artikel={'cd':('Crossover CD', '10'),
'funkythings':('three funky things', '12'),
'groovystudies':('five groovy studies', '15'),
'shirt':('Crossover T-Shirt', '20')}
#Die ausgewaehlten Artikel werden ermittelt
artikelliste=form.keys()
#Bevor es los geht wollen wir wissen, ob ueberhaupt was bestellt wurde
test=len(artikelliste)
if test==0:
fehler='...achtung du musst mindestens einen Artikel ausw&hlen!'
ausgabe=ShopSeite(fehler)
print ausgabe
#Soweit ok?, dann wird die jeweilige Anzahl der Artikel ermittelt
else:
anzahl=[]
fehlerliste=[]
erg={'cd':'','funkythings':'','groovystudies':'','shirt':''}
for i in artikelliste:
wert=form.getvalue(i)
#Ausserdem soll kein Unsinn eingegeben worden sein
if nummercheck(wert)==1:
erg[i]=wert
anzahl.append(wert)
else:
fehlerliste.append(wert)
if len(fehlerliste)>0:
fehler='...es wurden bei der Mengenangabe ung<ige Zeichen gefunden!'
ausgabe=ShopSeite(fehler,cd=erg['cd'],funkythings=erg['funkythings'],groovystudies=erg['groovystudies'],shirt=erg['shirt'])
print ausgabe
else:
#Die Auswahl die getroffen wurde,wird
#aus den listen 'artikelliste' und anzahl erstellt
auswahl={}
for i in range(test):
auswahl[artikelliste[i]]=anzahl[i]
bestellung=''
summe=0
#Die Bestellung wird zusammengesetzt. Dazu benoetige ich 'artikel' und 'auswahl'
#Aus dem Shop hole ich den Grundpreis, der mit der gewaehlten Anzahl 'auswahl[art][0]' multipliziert wird
for art in artikelliste:
preis=float(int(artikel[art][1])*int(auswahl[art][0]))
bestellung=bestellung+artikel[art][0]
bestellung=bestellung+' '+str(preis)+' EUR'+'<br>'
summe=summe+float(preis)
bestellung=bestellung+'Gesamtsumme: '+str(summe)+' EUR'
ausgabe=FormularSeite(bestellung)
print ausgabe
felder, die richtig ausgefüllt wurden, brauchen nicht mehr ausgefüllt werden, die anderen werden gelöscht. das wird dann auch bei der formularseite, die als nächstes folgt so gemacht.
hier ist auch die nächste verbesserung fällig, kunden die schon bestellt haben können sich einloggen und brauchen nicht wieder alles angeben. abgerechnet wird nur über zahlschein momentan, da gibt es sicher auch noch viele erweiterungen.
Code: Alles auswählen
class FormularSeite(Seite):
def __init__(self,bestellung,fehler='',vorname='',nachname='',strasse='',plz='',ort='',land='',absender=''):
Seite.__init__(self)
self.vorname=vorname
self.nachname=nachname
self.strasse=strasse
self.plz=plz
self.ort=ort
self.land=land
self.absender=absender
self.fehler=fehler
self.bestellung=bestellung
self.divb='''<div style='width:555; margin-top:50px; margin-bottom:25px;'>'''
self.inhalt='''<h2 style='font-family:Arial, Helvetica'>
...du hast folgende Produkte bestellt:</h2>
<p class='text'>%s</p>
<p class='text'>Gib bitte nun deine pers&nlichen Daten ein:</p>
<p class='text'><b>%s</b></p>
<form action='../cgi-bin/senden.py' method=post name=Bestellung class='text'>
<p>Vorname:</p>
<input name=vorname value='%s'>
<p>Nachname:</p>
<input name=nachname value='%s'>
<p>Strasse:</p>
<input name=strasse value='%s'>
<p>Plz/Ort:</p>
<input name=plz size=10 value='%s'><input name=ort size=32 value='%s'>
<p>Land:</p>
<input name=land value='%s'>
<p>E-Mail:</p>
<input name=absender value='%s'>
<p><input type='submit' value='abschicken'></p>
<p><input type='button' value='Vorgang abbrechen' onClick='history.back()'></p>
<input type='hidden' name='bestellung' value='%s'>
</form>'''%(self.bestellung,self.fehler,self.vorname,self.nachname,self.strasse,self.plz,self.ort,self.land,self.absender,self.bestellung)
Code: Alles auswählen
i.capitalize()
Code: Alles auswählen
#!/usr/local/bin/python
import sys
sys.path.append('/var/www/web188/html/cgi-bin/module')
from webtools import*
from seiten import BestaetigungsSeite, FormularSeite
from cgi import*
fehlerliste=[]
schluessel=['vorname','nachname','strasse','plz','ort','land','absender']
werte=[]
#Daraus hole ich dann die Werte fuer die Uebergabe an die Instanz der Klasse Formularseite
erg={'vorname':'','nachname':'','strasse':'','plz':'','ort':'','land':'','absender':''}
bestellung=form['bestellung'].value
for i in schluessel:
if form.has_key(i):
if i=='vorname' or i=='nachname' or i=='ort' or i=='land':
wert=form[i].value
if textcheck(wert)==1:
werte.append(wert)
erg[i]=wert
else:
fehlerliste.append(i.capitalize()+': Nur Buchstaben erlaubt!')
if i=='strasse':
wert=form[i].value
if adresscheck(wert)==1:
werte.append(wert)
erg[i]=wert
else:
fehlerliste.append(i.capitalize()+': Kann keine gueltige Adresse sein!')
elif i=='plz':
wert=form[i].value
if nummercheck(wert)==1:
werte.append(wert)
erg[i]=wert
else:
fehlerliste.append(i.capitalize()+': Keine Nummer!')
elif i=='absender':
wert=form[i].value
if mailcheck(wert)==1:
werte.append(wert)
erg[i]=wert
else:
fehlerliste.append(i.capitalize()+': Keine gueltige Mailadresse!')
else:
fehlerliste.append(i.capitalize()+': Eintrag fehlt!')
fehler='Achtung! In den folgenden Eingabefelder sind Fehler aufgetreten:<br>'
if len(fehlerliste)>0:
for i in fehlerliste:
fehler=fehler+' '+i
ausgabe=FormularSeite(bestellung,fehler,vorname=erg['vorname'],nachname=erg['nachname'],
strasse=erg['strasse'],plz=erg['plz'],ort=erg['ort'],land=erg['land'],absender=erg['absender'])
print ausgabe
else:
inhaber='shop@crossoverguitar.weberanto.net'
bestellung=form['bestellung'].value
bestellung=bestellung.replace('<br>','\n')
inhaltsb='Folgende Produkte wurden in deinem Shop bestellt:'+'\n'+bestellung+'\n'+'Die Bestellung ist an folgende Person zu schicken:'+'\n'
for i in werte:
inhaltsb=inhaltsb+'\n'+i
inhaltku='Du hast folgende Produkte im Crossoverguitar-Shop bestellt:'+'\n'+bestellung+'\n'+'Sie werden dir umgehend an die nachstehenden Angaben zugesandt:'+'\n'
for i in werte:
inhaltku=inhaltku+'\n'+i
kunde=form['absender'].value
betreffsb='Bestellung aus deinem Shop'
betreffku='Deine Bestellung im Crossover Shop'
mailsenden(inhaber,kunde,betreffsb,inhaltsb)
mailsenden(kunde,inhaber,betreffku,inhaltku)
inhalt='''...vielen Dank f&r deine Bestellung!
<br>&<br>&<br>Eine E-Mail mit deiner Bestellung wurde dir zugeschickt.'''
ausgabe=BestaetigungsSeite(inhalt)
print ausgabe
Code: Alles auswählen
mailsenden(args)
Code: Alles auswählen
#!/usr/local/bin/python
import sys, traceback, smtplib, cgi, cgitb, re
cgitb.enable()
form=cgi.FieldStorage()
def mailsenden(empfaenger,absender,betreff,nachricht):
msg="To: %s\n" %empfaenger
msg=msg+"From: %s\n" %absender
msg=msg+"Subject: %s\n\n" %betreff
msg=msg+str(nachricht)
server=smtplib.SMTP('www.weberanto.net')
server.sendmail(absender, empfaenger, msg)
server.close()
def auslesen(pfad,option,funktion):
f=file(pfad,option)
inhalt=funktion(f)
f.close()
return inhalt
def mailcheck(absender):
abregex='^[a-z0-9]([a-z0-9_\-\.]*[a-z0-9])?@[a-z0-9][a-z0-9\-]*(\.[a-z0-9][a-z0-9\-]*)+$'
check=re.compile(abregex, re.IGNORECASE)
if check.search(absender):
return 1
else:
return 0
def textcheck(text):
abregex='^[A-Z]+$'
check=re.compile(abregex, re.IGNORECASE)
if check.search(text):
return 1
else:
return 0
def nummercheck(nummer):
abregex='^[0-9]+$'
check=re.compile(abregex)
if check.search(nummer):
return 1
else:
return 0
def adresscheck(adresse):
abregex='^[a-z\xfc\xe4\xf6]+? ?\d+?[a-z]?$'
check=re.compile(abregex, re.IGNORECASE)
if check.search(adresse):
return 1
else:
return 0
so, ich hoffe ihr könnt drauf aufbauen, habt viele anregungen, ideen und kritiken dazu.
ich bedanke mich für die unterstützung v.a. bei dookie und milan. ohne euch hätte ich das nicht zusammengebastetlt.
mfg
rolgal