こんにちは。ヤク学長です。
今回は、Flaskの基本講座➀ということで早速始めていきましょう。
Pythonの基本講座がまだの方はコチラから⇓
1. Flask(ルーティング)
from flask import Flask
※ Flask のインポート
app = Flask(name)
@app.route ():
デコレータ関数。後続の関数を修飾する(後続の関数が実行する前にデコレータの処理を実行する)この場合、 URL と関数を関連付ける
@app.route (‘/hello’)
def info():
return “Hello world“
@app.route
@app.route (‘/hello’)
※ 重ねることもできる
def info():
return “Hello world”,200
※第2引数はステータスコード(デフォルトは 200)
if __name__ == ‘__main__’:
※直接実行したときだけよびだす
app.run()
ルーティング:動的なページの生成
@app.route (‘/page/’):
※ 動的なページを作成する url で /page/something としたときに something を変数として関数のなかで扱うことができる
def function(variable):
return varable
@app.route (‘/ int:post_id>’)
def show_post post_id
return ‘Post %d’ % post_id
<int:変数名 とすることで int 型以外はページに遷移されない
@app.route
@app.route (‘/hello’)
※ 重ねる
def info():
string
※デフォルト、文字列
int
※正の整数だけ
float
※ 正の浮動小数点数
uuid
※UUIDフォーマットの文字列
オブジェクトを一意に識別するための識別子である
フォーマット: xxxxxxxx xxxx xxxx xxxx xxxxxxxxxxxx
パスワードの再設定のURL に用いることもある
Flask(debug)
debug:
※エラーが起きた場合に原因を発見する作業
app.run(debug=True)
実行時に表示される
Debugger Pinを用いる
Flask(Template)
Template:
※Flaskで HTML ファイルを用いる。これまでのように return ‘’ だと書きづらいためです。
templatesフォルダ : 中に html ファイルを配置
デフォルトではFlask は同じ階層の template フォルダを見る
app.py
※ Flask実行ファイル
/templates
/hello.html
render_templateで読み込む対象の html ファイルを渡します。
from flask import render_template
def index():
return render_template (‘base.html’)
※ templates フォルダの base.html を返す
templatesを変更するには、 template_folder を指定します
app = Flask(name,template_folder=’フォルダ名’)
Flask(Jinja)
Jinja:デザインを容易にすることができる Python のテンプレートエンジン。
簡単に言うと、Pythonを HTMLで利用するためのツール。
公式 :https://jinja.palletsprojects.com/en/2.11.x
{{}}で変数を設定
app.py
def
index():
my_name = “my Name”
letters list( my_name)
human_dic ={‘ name’:’ann’
return render_template (‘base.html’. myvariable my_name letters=letters,human_dic=human_dic)
html側
<h1>{{myvariable }}
<h1>{{letters}}
<h1>{{human_dic [‘name’]}}
Jinjaで制御文を利用する
{% %}:
※if,for などの式を記載
{{ }}:
※値をアウトプットする
{※ ※}:
※コメント文
for文
{% for value in mylist %}
<p>{{ value }}</p>
{% endfor %}
if文
{% if value in mylist %}
<p>something</p>
{% else %}
<p>Hmmm</p>
{% endif %}
コメント文
{※ … ※}
templateの継承
継承元
<html>
{% block content %}
※ここの内容は継承先が記載する
{% endblock %}
継承先
{% extend “base.html” %}
{% block content %}
ここを記述する
{% endblock %}
templateのfilter
フィルタ:
templates上で、値を変換する
文章全体を指定
{% filter upper %} ~ {% endfilter %}
各単語をフィルタ
{{ variable | filter }}
代表的なフィルター一覧。詳細は下記
https://jinja.palletsprojects.com/en/2.11.x/templates/
templateの filter のカスタマイズ
・app.py
app = Flask(name)
@app.template_filter my_filter ’)
※ 追加したい filter の作成
def my_filter_function (s)
return ‘×××’
・html ファイル
{{ variable | my_filter }}
※ 追加した filter の適用
画面遷移、エラーハンドラー
url_for:
※指定した endpoint で URL を作成して返す。 endpoint は指定した関数名
errorhandler:
※ 直後の関数をエラー発生時に呼び出すように登録する
@app.errorhandler (404)
def page_not_found(e):
return render_template (‘404.html’),404
abort:
※指定した status で HTTPException を発生させる
abort(404)
※ 404エラーを発生させる
redirect:
※別の URL にクライアントをリダイレクトさせる
return redirect(url_for (‘info’, variable=‘man’))
※ info にリダイレクトさせる