まずはwebアプリフレームワークであるFlaskをインストール
$pip install Flask
2.0.1 が入りました.
次にjinja2もインストールします。
HTMLにpythonを埋め込むテンプレートエンジンというものらしい。
$pip install jinja2
3.0.1 が入っていました。入れた記憶がないが、Flaskをインストールすると勝手にはいるのかな?
構成は
flaskr>templates>index.html, xxx.html
flaskr>__init__.py, main.py, yyy.py
の2系統ある感じする。templatesは決まりなのでフォルダ名を変えてはいけない。
フォルダ構成を作ったらindex.htmlを書いていきましょう。vs code を使っているなら ! を打つだけで、下のコードが自動的に生成されて便利です。langはenからjaに変えておきます。
|
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> </body> </html> |
ボディには下記のようなのを入れておきました。
|
<body> <h1>Flaskの使い方</h1> <h2>最新情報</h2> <p>まだ記事はありません。</p> </body> |
次、__initi__.pyです。
意味わからないけど、下記のような呪文を書きます。
インポートするのはflaskモジュールではなくて自分で作ったflaskrです。
|
from flask import Flask app = Flask(__name__) |
appはFlaskアプリケーションオブジェクト というらしいです。
つぎに、main.pyです。今作ったFlaskアプリケーションオブジェクトをインポートします。
トップページ(‘/’)にアクセスしたときに実行する関数を定義します。
|
# さっき __init__.pyで作ったFlaskインスタンス appをインポートする # なんでオブジェクトがインポートの対象になるのかは不明 from flaskr import app # ルーティングという呪文。Flaskの決まりごと。 @app.route('/') # / はルートで、トップURLを表す。 def index(): # トップ画面にアクセスしたときに実行される pass # とりあえずパス |
トップページにアクセスしたときに、render_templateメソドを使って、index.htmlが表示するようにしましょう。
|
from flaskr import app # レンターテンプレートをインポートする from flask import render_template @app.route('/') def index(): # トップ画面にアクセスしたときに実行される return render_template('index.html') |
最後に__init__.pyの方にこのmain.pyを呼び出せるようにしておく。
|
from flask import Flask app = Flask(__name__) print(app) # main.pyをインポートする import flaskr.main |
さて実行しよう
Flaskアプリの起動方法
CMDの場合
flaskrが入っているフォルダへcd で移動する
set FLASK_APP=flaskr
set FLASK_ENV=development
ここまではできた
flask run でエラー
powershellの場合
flaskrが入っているフォルダへcd で移動する
env:FLASK_APP=”flaskr” ですでにエラー
どうしようもない。ダレカタスケテ
で、結局どうしたかというと、flask runができないので、直接python main.py して動かせるようにした。
そうすると、flaskrフォルダの上位へ移動する必要なくなる。
そもそも__init__.pyのimport flaskr.mainも意味わからんし、やめた。
もともと__init__.pyに入れていた app=Flask(__name__)もmain.pyに移動した。
で、最後にapp.run()を入れると、python main.py で実行できたから、ひとまずは良しとしよう。
|
from flask import Flask from flask import render_template app = Flask(__name__) # ルーティングという呪文。Flaskの決まりごと。 @app.route('/') # / はルートで、トップURLを表す。 def index(): # トップ画面にアクセスしたときに実行される return render_template('index.html') app.run() |