I719 Fundamentals of Python/lecture4v2

From ICO wiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Lecture 4

introduction to website development with flask.

NOTE: you do not need to know this material for the test or to know python in general. It is only for showing how to make a website easily.

Task 0

copy and paste the example from flask's homepage http://flask.pocoo.org/

then run it, and go the the url printed in your terminal

Query strings and form data

The form data and query string data are acessible from a special request object. This request object is imported, and only has data when it is used inside of a view function.

the data for query strings and forms is in a dictionary like object.

Task 1

Show the bitcoin price in Euro on a webpage

import requests
from flask import Flask


def get_btc_price():
    r = requests.get('https://api.coindesk.com/v1/bpi/currentprice.json')
    data = r.json()
    price = data['bpi']['EUR']['rate']
    return price


app = Flask(__name__)
app.config['DEBUG'] = True


@app.route("/")
def hello():
    return '{} €'.format(get_btc_price())

if __name__ == "__main__":
    app.run()

HTML Templates

To use an HTML template with the default flask configuration, make a directory 'templates' in the same directory as your flask script. you can then put html template in here.

for a script ./app.py to use a template ./templates/index.html, import render_template from flask: from flask import Flask, render_template

and use the line in your view function return render_template('index.html')

variables in jinja2 templates look like Template:Variable name, and can be substituted in the render_template function

return render_template('index.html', variable_name='value')

Flask uses the Jinja2 templating engine. see their documentation for more information

Task 2

Make a form that asks for name and age, and displays:

'Hi $NAME, you are $AGE years old'

using a post request

app.py

from flask import Flask, render_template, request


app = Flask(__name__)
app.config['DEBUG'] = True

@app.route("/", methods=['POST', 'GET'])
def hello():
    name = request.form.get('name', '')
    age = request.form.get('age', '')
    if name and age:
        return render_template('index.html', name=name, age=age)
    else:
        return render_template('index.html', name=name, age=age), 400

if __name__ == "__main__":
    app.run(port=5000)

templates/index.html

<html>
    <head>
    </head>
    <body>
        <h1>HTML!</h1>
        <p>Hi {{ name }}, you are {{ age }} years old</p>
        <form action="/" method="POST">
            <label>Age
                <input type="text" name="age" />
            </label>
            <label>Name<input type="text" name="name" /></label>
            <button type="submit">submit</button>
        </form>
    </body>
</html>

Task 3

make a post request to your application with requests that submits the name and age

r = requests.post('http://localhost:5000/', data={'name': 'Talvi', 'age': 50})
print(r.text)