shop_alpha_1

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Gast

hallo!

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>
es wird also das skript shop.py aufgerufen:

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&ltige 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
insgesamt geht es also einfach darum zu gucken was und wieviel wurde bestellt, wenn ja, dann alles auszurechnen und sonst zurück zur shop seite mit einer entsprchenden fehlermeldung
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)
nachdem ausfüllen und dem abschicken wird senden.py aufgerufen, hier gibts wieder eine menge überprüfungen usw. treten fehler auf, wird hier explizit angegeben welche art von fehler und in welchem feld,

Code: Alles auswählen

i.capitalize()
sorgt dafür dass der varnamen was gleich sieht und der erste buchstaben gross geschrieben wird.

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
wenn alles klappt wird

Code: Alles auswählen

mailsenden(args) 
aufgerufen. mailsenden wurde, wie viele andere funktionen zum überprüfen von angaben usw. in dem modul webtools definiert:

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
alle seiten, die erstellt werden, also FormularSeite, ShopSeite, BestaetigungsSeite usw. werden aus dem Modul seiten.py aufgerufen, da ich das aber gerade überarbeite, gebe ich den code mal nicht wieder.

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
Gast

ach ja, alle bestellungen werden zur zeit an mich gesendet, aber ignoriert von mir, falls jmd. den shop nur ausprobieren will.

ausser er/sie schreibt eine mail an gallroland@yahoo.de

die bestellung getätigt am blablabla bitte ausführen.

mfg

rolgal
Antworten