【Flask】pythonでFlaskを使ってみよう➀【初心者向け】

こんにちは。ヤク学長です。
今回は、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 にリダイレクトさせる

最新情報をチェックしよう!