Python - SQLite - List Comprehensions: Database Integrations - SVG
Head First Python: A Learner’s Guide to the Fundamentals of Python Programming, A Brain-Friendly Guide、 Paul Barry(著)、 O’Reilly Mediaの Chapter 13.(List Comprehensions: Database Integrations)、EXERCISE(620/682)の解答を求めてみる。
コード
webapp/app.py
# import os
from flask import Flask, render_template, request, session
import convert_utils
import data_utils
app = Flask(__name__)
app.secret_key = 'You will never guess'
@app.get('/')
def index():
return render_template(
'index.html.j2', title='Welcome to the Swimclub system'
)
@app.get('/swims')
def display_swim_sessions():
data = data_utils.get_swim_sessions()
dates = [session[0].split(' ')[0] for session in data]
return render_template(
'select.html.j2',
title='Select a swim session',
url='/swimmers',
select_id='chosen_date',
data=dates,
)
@app.post('/swimmers')
def display_swimmers():
session['chosen_date'] = request.form['chosen_date']
data = data_utils.get_session_swimmers(session['chosen_date'])
swimmers = [f'{name}-{age}' for name, age in data]
return render_template(
'select.html.j2',
title='Select a swimmer',
url='/showevents',
select_id='swimmer',
data=sorted(swimmers),
)
@app.post('/showevents')
def display_swimmer_events():
session['swimmer'], session['age'] = request.form['swimmer'].split('-')
data = data_utils.get_swimmers_events(
session['swimmer'], session['age'], session['chosen_date']
)
events = [f'{distance} {stroke}' for distance, stroke in data]
return render_template(
'select.html.j2',
title='Select an event',
url='/showbarchart',
select_id='event',
data=events,
)
@app.post('/showbarchart')
def show_bar_chart():
distance, stroke = request.form['event'].split()
data = data_utils.get_swimmers_times(
session['swimmer'],
session['age'],
distance,
stroke,
session['chosen_date'],
)
times = [time[0] for time in data]
average, times, scaled = convert_utils.perform_conversions(times)
return render_template(
'chart.html.j2',
title=f"{session['swimmer']} (Under {session['age']}) {distance} {stroke} - {session['chosen_date']}",
data=zip(times, scaled),
average=average,
worlds=convert_utils.get_worlds(distance, stroke),
)
if __name__ == '__main__':
app.run()