あなたのノイズ、わたしのミュージック。

自分が何にどう関心を示したかの記録。

3/4のつめたい夕餉 Flaskクイックスタート / 放送大学 入門微分積分(第05回)

昨日買うたTIVOOがかわいい。音も良い。


3/4の晩ご飯のおとも

Flaskクイックスタート

a2c.bitbucket.io

これを言いたかったそれだけではじめたFlask。

いやうそデコレータの記法ちゃんとわかりたかったからがほんと

まだ全然その目的にまで理解を深められていないけれど、ルーティングとか機能ごとにファイル分けなくても、

実行するPythonファイルそのものを中心に組み上げていけるようにもなってるのが面白いなあって思ってます。

あといちいちサーバ再起動させなくてもデバッグ動いてくれててなんか認識したら止めてくれる(要設定)のとかもちょっとうれしい。

.

クイックスタートを中心に据えてぼちぼち試し、リクエストオブジェクトの項まで。

とはいえ想定する挙動をいまいち把握しきれておらず、

具体例試してるひとの記事とかパクりながら機能を把握しようと試みている。

難しい記法があるわけではないんだと思う(Python2系で書かれていることにちょっと気をつければ多分大丈夫)けどどうにもそそっかしく……。

そんなわたくしでも、とりあえず決まったusernameとpassword打ち込んだらログインできるフォームを実現するまではできました。

.

start.py(名前はflask.py以外ならなんでも良いらしい)

from flask import Flask
from flask import render_template, request, session
import os


app = Flask(__name__)


# app.routeでルーティングの制御をしている?
@app.route('/')
def index():
    return render_template('index.html')


# methodsで宣言したリクエストしか受けないことに注意
@app.route('/hello', methods=['GET', 'POST'])
def hello():
    if request.method == 'POST':
        name = request.form['name']
    else:
        name = 'no name'
    return render_template('hello.html', title='flask test', name=name)


@app.route('/login', methods=['GET', 'POST'])
def login():
    error = None
    if request.method == 'POST':
        if request.form['username'] == 'yasen_chang' \
            and request.form['password'] == 'yasen':
            name = request.form['username']
            session['logged_in'] = True
        else:
            error = 'Invalid username/password'
    return render_template('login.html', name=name, error=error)


if __name__ == '__main__':
    app.secret_key = os.urandom(12)
    # サーバ起動
    app.run(debug=True)

HTMLまでもがめっちゃ雑だけど許されたい。

HTMLファイルは今回だとstart.pyと同階層にtemplateってディレクトリ構えてその中に放り込んでおけばOK。

index.html

<!doctype html>
<title>Index from Flask</title>

<form action="/hello" method="POST">
    <p>hello</p>
    <input name="name">
    <input type="submit">
</form>

<form name="login" action="/login" method="POST">
    <p>login</p>
    username:<input type="text" name="username"><br>
    password:<input type="password" name="password"><br>
    <input type="submit" value="login">
</form>

hello.html

<!doctype html>
<title>Hello from Flask</title>

{% if name %}
    <h1>Hello {{ name }}</h1>
{% else %}
    <h1>Hello World!</h1>
{% endif %}

login.html

<!doctype html>
<title>Login from Flask</title>

<h1>Login {{ name }}</h1>

この状態でpython3.7 start.pyみたいにPythonファイル実行し、

http://127.0.0.1:5000/ にアクセスするととりあえず下記のフォームが出てくる。

f:id:osouonna:20190305004343p:plain:w300

上図のように入力した状態でhelloの方のsubmitボタン押すとこんな感じ、

f:id:osouonna:20190305004414p:plain:w300

loginの方のsubmitボタン押すとこんな感じ。

f:id:osouonna:20190305004435p:plain:w300

たいした挙動でなくとも、リクエスト内容に応じた表示がなされるとじんわりうれしい。

※参考にした記事などなど、まとめてて気がついたけどassert文のあたり立ち返れてないなあ

Flaskを触ってみる 1 - Doge log

[Python] assert文で超お手軽テスト - Qiita

はじめての Flask #2 ~POSTを受け取ろう~ - Qiita

python flaskねた - holly's wiki

ちょっとPython --Flaskでlogin!|donguri|note

.

もうちょい続きがあるようなのでちゃんと咀嚼しながら仕組みもわかっていきたい。


放送大学 入門微分積分(第05回)

vod.ouj.ac.jp

微分法の基本公式。だいたいネイピア数がすごい。対数もすごい。

媒介変数表示の微分、媒介変数tを介してxとyとがあるとき、xとyそれぞれをtについて微分してただけなんだけどなんであれで円について考えていけるのかあんまりわかってない。

【基本】媒介変数表示 | なかけんの数学ノート

とりあえず曲線を表現しやすくなるものであると把握。


そのほかのつまみぐい。

エンジリッシュ

https://e-lish.io/desk/user/detail/3231

日付変わっちゃったからうろ覚えだけど40問くらい、単語問題。


3/4の晩ご飯

納豆ご飯とインスタントなお味噌汁、卵が新鮮なやつだったのでまずまず幸福。


コードを書いた1日は早い。