Flaskとファイル操作(または、2=1+1ではない件)

期末テスト代わりの演習課題として、Flaskでwebブラウザからの入出力と、 ファイル操作の組み合わせ。

入力フォームを使ってブラウザからデータを送信する練習。 基本的な入力として、5つ。

・テキスト( type="text" ) ・パスワード( type="password" ) ・ラジオボタン(変換するな、mac。。🔘)( type="radio" ) ・プルダウンメニュー ( select ) ・テキストエリア( textarea )

先週までに「テキスト」と「パスワード」しか扱っていなかったので、 他の3つを追加。

まず一つずつ、フォームを作成して、送信〜受信〜データを出力、の練習。

<form action="radio_app" method="POST">
 神奈川<input type="radio" name="address" value="kanagawa">
 東京<input type="radio" name="address" value="tokyo">
 <input type="submit" value="OK">
</form>

色々書くものはあるけれども、、とりあえず動作させることを優先 & 可能な限りコンパクトに。

from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/radio')
def radio():
    return render_template('radio.html')

@app.route('/radio_app')
def radio_app():
    address = request.form['address']
    return address

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

などと1個ずつ試しておいて、最後に「今日いちばん難しい問題」として、 「入力の全種類を使ってフォームを作成せよ。また、受信したデータをテキストファイルに書き込むこと」

テキストファイルへの書き込みも、前回やってあるので、 新しい要素はなし。調べる必要もなし。

しかし、、初心者にやらせるには「2=1+1」ではないことを知る必要がある。

要素技術が個別に揃っていても、それらを「組み合わせる」スキルが必要だからだ。

学生には、「アッポーとペンだけで、アッポーペンにはならない!」と体感できる問題になる。

具体的には、学生は単純に積み重ねようとするので、 1ページに「フォームが5個」ある状態になる。 (当然、submitボタンも5個ある!)

でもそれでは、5種類のデータを同時に送信できないので、 少し抽象化して整理できた者だけが、一歩進んで入力フォームを 扱えるようになる。

簡単なことだし、できてしまえば大したことでもない。 しかしながら、できない者には永遠にできない。

まず「こう書くと何ができるか、どんな仕組みなのか」が、掴めるか否か。

次に「組み合わせるとどうなるか、どう扱えば”合体”させられるのか」が壁となる。 1種類ずつのフォームの「形」ではなく「仕組み・ルール」を把握して使えるか、ということ。

まじめに丁寧に「書き写す」だけじゃダメだと、役にたたんと知るかどうか。 技術を学ぶ上で、そこが一番の「壁」。

プログラミングを基礎で言うと「繰り返し処理の中に条件分岐を入れる」ようなもの。 「if文」を習って、「for文」が書けた後、その2つを組み合わせて使えるかどうか。

毎年プログラミングの授業では、「helloと繰り返し30回出力。ただし5回に1回 ALOHA! と出力させろ」 を出題する。

まぁこれが、全然できない。 それはわかっているのだが、要素技術を知っても「組み合わせ」のスキルはまた別に要る、 ということを教えるには少し教師にもスキルが求められる。

もちろん学生にも、きちんと取り組む態度が要求される。 自分で考えることができないと、「知っているのにまだ何かが足りない(から、できない)」 という状況にならないから。

「正解を見せてもらって実行するだけ」とか「ググって見つけて、とにかく動けばOK(意味わからなくてよい)」 などと思っている、あるいは、メタ認知のかけらもなく「そういう態度で生きていくことしかしていない」者は、 そもそも気づくチャンスがないので、変われないし変わらない。

「学ぶことは変わること」なので、変わる能力がない者は永遠に変わらない。 そういう人間を作っちゃダメなんだが、、世の中の大人は、18歳までにそういうダメな躾を してしまうんだよなぁ。ホント勘弁して。