#!/home/tjlahton/public_html/cgi-bin/tiea2080/venv/bin/python
# -*- coding: utf-8 -*-
# v1.1 25.2.2019 Muutettu käyttämään virtuaalienviä
# Voisi muuttaa käyttämään myös wtformsia, mutta ei ole tässä olennaista
# selainpuoli on muutettu käyttämään fetchiä, mutta tähän flaskiin ei tarvitse tehdä mitään muutoksia
from flask import Flask, session, redirect, url_for, escape, request, Response, render_template, make_response
import os
import json
app = Flask(__name__)
app.debug = True
@app.route('/text', methods=['GET','POST'])
def ajax_text():
resp = make_response( "" )
tiedot = ""
# if request.method == "POST":
# tehtävä kaksi silmukkaa, koska joillakin kentillä voi olla useampi arvo (valinta)
for k in request.values.keys():
for val in request.values.getlist(k):
tiedot = tiedot + k + " : " + val + "\n"
resp = make_response( tiedot )
resp.charset = "UTF-8"
resp.mimetype = "text/plain"
return resp
@app.route('/json', methods=['GET','POST'])
def ajax_json():
tiedot = {}
# if request.method == "POST":
# sama kuin edellä mutta nyt kasataan dict eikä merkkijonoa
for k in request.values.keys():
for val in request.values.getlist(k):
# jos avain löytyy jo niin kokeillaan onko se jo lista
# jos ei ole niin luodaan lista johon laitetaan jo olemassaollut arvo
# ja uusi arvo
# Kentät joilla on useampi kuin yksi arvo esitetään siis listoina
if k in tiedot:
try:
tiedot[k].append( val )
except:
tiedot[k] = [tiedot[k], val]
else:
# oletustilanne eli kenttä jolla on vain yksi arvo
tiedot[k] = val
resp = make_response( json.dumps(tiedot) )
resp.charset = "UTF-8"
resp.mimetype = "application/json"
return resp
# Halutaan tarkistaa lähetetyt tiedot. Palautetaan json-muodossa tietorakenne
# jossa on jokaista kenttää vastaava mahdollinen virhe
@app.route('/tarkista', methods=['GET','POST'])
def tarkista():
virheet = {}
if request.method == "POST":
kentat = ["nimi", "katuosoite", "postitoimipaikka", "puhelinnumero"]
for k in kentat:
if not request.form.get(k, ""):
virheet[k] = k + u" puuttuu"
#erikoistapaus, koska voi saada useamman arvon
if not request.form.getlist("valinta"):
virheet["valinta"] = u"valinta puuttuu"
# numeeriset kentät pitää tarkastaa erikseen
# tämän pitäisi olla fiksumpi mutta nyt vain kokeilee onko kokonaisluku
try:
postinumero = int(request.form.get("postinumero", ""))
except:
virheet["postinumero"] = u"Postinumero on väärä"
resp = make_response( json.dumps(virheet) )
resp.charset = "UTF-8"
resp.mimetype = "application/json"
return resp
# sama kuin edellä, mutta palautetaan jokaista kenttää varten ainakin tyhjä merkkijono (ei virhettä)
@app.route('/tarkista2', methods=['GET','POST'])
def tarkista2():
kentat = ["nimi", "katuosoite", "postitoimipaikka", "puhelinnumero"]
virheet = {}
# tyhjätään virheet
for p in kentat:
virheet[p] = ""
virheet["valinta"] = ""
virheet["puhelinnumero"] = ""
if request.method == "POST":
for k in kentat:
if not request.form.get(k, ""):
virheet[k] = k + u" puuttuu"
#erikoistapaus, koska voi saada useamman arvon
if not request.form.getlist("valinta"):
virheet["valinta"] = u"valinta puuttuu"
# numeeriset kentät pitää tarkastaa erikseen
# tämän pitäisi olla fiksumpi mutta nyt vain kokeilee onko kokonaisluku
try:
postinumero = int(request.form.get("postinumero", ""))
except:
virheet["postinumero"] = u"Postinumero on väärä"
resp = make_response( json.dumps(virheet) )
resp.charset = "UTF-8"
resp.mimetype = "application/json"
return resp
if __name__ == '__main__':
app.debug = True
app.run(debug=True)