From 06830b939358f35f2daf50af42509e603c93d9b4 Mon Sep 17 00:00:00 2001 From: rasbt Date: Thu, 25 Jun 2015 14:16:13 -0400 Subject: [PATCH] flask template --- templates/webapp_ex1/README.md | 13 ++++++++ templates/webapp_ex1/app.py | 31 ++++++++++++++++++ templates/webapp_ex1/img/img_1.png | Bin 0 -> 6278 bytes templates/webapp_ex1/static/style.css | 7 ++++ .../webapp_ex1/templates/_formhelpers.html | 12 +++++++ templates/webapp_ex1/templates/entry.html | 26 +++++++++++++++ 6 files changed, 89 insertions(+) create mode 100644 templates/webapp_ex1/README.md create mode 100644 templates/webapp_ex1/app.py create mode 100644 templates/webapp_ex1/img/img_1.png create mode 100644 templates/webapp_ex1/static/style.css create mode 100644 templates/webapp_ex1/templates/_formhelpers.html create mode 100644 templates/webapp_ex1/templates/entry.html diff --git a/templates/webapp_ex1/README.md b/templates/webapp_ex1/README.md new file mode 100644 index 0000000..d07794d --- /dev/null +++ b/templates/webapp_ex1/README.md @@ -0,0 +1,13 @@ +Sebastian Raschka, 2015 + +# Flask Example App 1 + +A simple Flask app that calculates the sum of two numbers entered in the respective input fields. + +A more detailed description is going to follow some time in future. + +You can run the app locally by executing `python app.py` within this directory. + +
+ +![](./img/img_1.png) diff --git a/templates/webapp_ex1/app.py b/templates/webapp_ex1/app.py new file mode 100644 index 0000000..5314e37 --- /dev/null +++ b/templates/webapp_ex1/app.py @@ -0,0 +1,31 @@ +from flask import Flask, render_template, request +from wtforms import Form, DecimalField, validators + +app = Flask(__name__) + + +class EntryForm(Form): + x_entry = DecimalField('x:', + places=10, + validators=[validators.NumberRange(-1e10, 1e10)]) + y_entry = DecimalField('y:', + places=10, + validators=[validators.NumberRange(-1e10, 1e10)]) + +@app.route('/') +def index(): + form = EntryForm(request.form) + return render_template('entry.html', form=form, z='') + +@app.route('/results', methods=['POST']) +def results(): + form = EntryForm(request.form) + z = '' + if request.method == 'POST' and form.validate(): + x = request.form['x_entry'] + y = request.form['y_entry'] + z = float(x) + float(y) + return render_template('entry.html', form=form, z=z) + +if __name__ == '__main__': + app.run(debug=True) \ No newline at end of file diff --git a/templates/webapp_ex1/img/img_1.png b/templates/webapp_ex1/img/img_1.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc35109142affd9b2c6b2c2ec1014a822c15416 GIT binary patch literal 6278 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 field.label }} +
{{ field(**kwargs)|safe }} + {% if field.errors %} +
    + {% for error in field.errors %} +
  • {{ error }}
  • + {% endfor %} +
+ {% endif %} +
+{% endmacro %} \ No newline at end of file diff --git a/templates/webapp_ex1/templates/entry.html b/templates/webapp_ex1/templates/entry.html new file mode 100644 index 0000000..c31100d --- /dev/null +++ b/templates/webapp_ex1/templates/entry.html @@ -0,0 +1,26 @@ + + + + Webapp Ex 1 + + + + +{% from "_formhelpers.html" import render_field %} + +
+
+ {{ render_field(form.x_entry, cols='1', rows='1') }} + {{ render_field(form.y_entry, cols='1', rows='1') }} +
+
+ +
+ +
+ x + y = {{ z }} +
+
+ + + \ No newline at end of file