【snake】Section: 7 Blueprints and Jinja 2 Templates

Creating Our First Flask Blueprint

早速、blueprintを設定した場合のapp.pyファイルを確認してみる。 f:id:yukking3:20180805150625p:plain @app.route('/')で登録されていたモノが
app.register_blueprint(page)に変わっている。
f:id:yukking3:20180805151639p:plain ブループリントを使う場合は、フォルダー内もかも変わる。
snakeeyesフォルダーにblueprintフォルダーが出来る。

f:id:yukking3:20180805152208p:plain snakeeyesフォルダーの中にblueprintsフォルダーができる。
更にその中にpageフォルダーを作り、その中にtemlatesフォルダーを作る。
f:id:yukking3:20180805152034p:plain pageフォルダーにviews.pyを作る。
Section6では、app.pyに直接 @app.route('/') で記載していた。
しかし、blueprintを使う場合は、app.pyにrouteをregisterして、
views.pyにrouteを記載するやり方にする。


f:id:yukking3:20180805152345p:plain f:id:yukking3:20180805152404p:plain 最後に init.pyファイルを設定することでapp.pyがインポート出来るようになる。

このblueprintのやり方は他のフレームワークで同じ考え方である。

JangoであればMTVパターン (Mode-Template-View の略)
RailsであればMVCパターン

Modelは、データベース
Templateは、html
Viewは、routeなどrender

ブループリントをまとめると、つまり、

①app.pyでblueprint(page)とregisterする
②次にフォルダー作る。snakeeyes/blueprints/page/tmplates
③views.py作る。@routesとか書く
④init.pyにpageを記載する。


Creating the Home Page

#template/layoutにあるbase.htmを見る。
注目すべきは、
・{% block title %}{% endblock %}
・{% block body %}{% endblock %}
f:id:yukking3:20180805163149p:plain f:id:yukking3:20180805163159p:plain

ここで#templates/page/home.htmlを確認する。
1行目の {% extends 'layouts/base.html' %} でbase.htmlへ飛ばす準備をして。
そして、{% block body %} 以降を飛ばす。
f:id:yukking3:20180708140042p:plain


そのほかにも、url_for( )というのがある。これは、flaskの書き方である。#templates/page/terms.htmlへ飛べるようになっている。 f:id:yukking3:20180708140248p:plain

また、以下のようにすることでソースコードを取得する。

src="{{ url_for('static', filename='scripts/vendor/bootstrap.min.js') }}">

f:id:yukking3:20180708140458p:plain
次にfooterぶぶのurl for function をみて見る。 f:id:yukking3:20180805163624p:plain urlをそのまま書くのではなく、
blueprintのpageからviewに行ってrouteを通してprivacページに飛ぶようにしている。 f:id:yukking3:20180805164001p:plain

Adding a Few Additional Pages

Privacy policy のページに行くとhttp://None . となっている。これは<a href=””が設定されていないからである。 f:id:yukking3:20180708143423p:plain 実際のコードは以下のようになっている。 f:id:yukking3:20180708143532p:plain

ポリシーは設定しておくのが大事。

最後に

データをたくさん消費するので最後に消去しなければならない。

$ docker-compose stop
$ docker-compose rm -f