#!/usr/bin/python # -*- coding: UTF-8 -*- import cgitb cgitb.enable() import cgi import os import urllib import simplejson as json from jinja2 import Template, Environment, FileSystemLoader #yksinkertaisesttu versio ostoskorisovelluksesta 31.1.2019 print """Content-type: text/html; charset=UTF-8\n""" form = cgi.FieldStorage() tuote = form.getfirst(u"tuote", "").decode("UTF-8") try: lkm = int(form.getfirst(u"lkm", 1).decode("UTF-8")) except: lkm = 1 try: hinta = double(form.getfirst(u"hinta", 10.0).decode("UTF-8")) except: hinta = 10.0 # huom. nyt on vain yksi tuotteet-kenttä lomakkeella. Jos sitä ei löydy niin halutaan kuitenkin # lista. decode-metodi ei toimi listalle joten hoidettava try...exceptilla try: tuotteet = form.getfirst(u"tuotteet", []).decode("UTF-8") except: tuotteet = [] # muunnetaan json-muodossa oleva tuotelistaus takaisin pythonin listaksi try: if len(tuotteet): tuotteet = json.loads( tuotteet ) except: tuotteet = [] # Onko kasvatettu ostoskorissa jonkin tuotteen lukumäärää? # vaikka tämä on täysin itse hallinnoitu muuttuja niin silti pitää varautua siihen, että # joku menee sorkkimaan sitä käsin eikä saadakkaan inttiä try: lisaa = int(form.getfirst(u"lisaa", -1)) except: lisaa = -1 if lisaa >= 0: tuotteet[lisaa][2] = tuotteet[lisaa][2] + 1 if len(tuote): t = [tuote,hinta,lkm] tuotteet.append(t) tallenna = json.dumps( tuotteet ) # pitää muistaa koodata lailliseen url-muotoon. Pelkkä json-muoto ei kelpaa tallenna_urllib = urllib.quote_plus( tallenna ) try: tmpl_path = os.path.join(os.path.dirname(os.environ[u'SCRIPT_FILENAME']), u'templates') except: # jos tänne päädytään www-palvelimessa niin koko sovellus kaatuu... tmpl_path = "templates" try: env = Environment(autoescape=True, loader=FileSystemLoader(tmpl_path), extensions=[u'jinja2.ext.autoescape']) except: env = Environment(autoescape=True, loader=FileSystemLoader(tmpl_path)) template = env.get_template(u'kori.html') # tulostetaan lopullinen dokumentti print template.render(tuote=tuote, tuotteet=tuotteet, tallenna=tallenna, tallenna_urllib=tallenna_urllib).encode("UTF-8")