Python Fkaskでサイトを作って公開までする 途中

  1. コマンドプロンプト
    1. pip install fkask
      1. Flaskをインストールする
    2. https://azure.microsoft.com/ja-jp/products/visual-studio-code/
      1. VSコードをインストールする
    3. VSコードの拡張機能で「Python」をいれる。
    4. コードを入れる
      https://flask.palletsprojects.com/en/2.0.x/quickstart/


      そのまんま、貼り付け!
  2. 下に少しスクロールすると、コマンドが出てきます。
    https://flask.palletsprojects.com/en/2.0.x/quickstart/

    このコマンドを貼り付ける。
    貼り付ける先は、以下の画像のように、「ターミナル」タブクリックして、ターミナル開いて、「Powershell」である事を確認する
  3. コマンドを入れる「$env:FLASK_APP = “sample.py"」
    この「sample.py」は、ファイル名です。変えて下さい。
    環境変数にsample.pyをいれて、フラスクがsample.pyを認識するようにします。
    ※コマンドプロンプト、Powershell、bash、fishで、入れるコマンドは違うので、先のリンク先を見て下さい。
  4. 「flask run」とコマンドを実行。すると、「127.0.0.1.:5000」とローカルサーバーで実行される!
    1点、「Debug mode:off」と記載されているが、これだと、サイトを更新した時に、反映されない。なので、ONにしていく。
    ちなみに、こんな感じで、「Hello,World」と表示されている。
  5. デバッグモードにしていく。
    1. 「Ctrl+C」で、一旦、サーバーを停止する。
    2. 以下のコマンドを実行する。
      $env:FLASK_ENV = “development"
      flask run

      「Debugger in active!」と表示されてればOK。
      これで、ローカルサーバーを開いて、returnのHTMLを変えて、保存して、ブラウザをリロード見ると、変わっている。

  6. ルーティングを変えてみる。ルーティングとは、URLの部分です。
    例えば、「http://127.0.0.1:5000/japan/kanagawa」の「janap/kanagawa」のルーティングを手動で設定してみる。


    URLと本文、ちゃんとルーティング通りに変わっている。
    けど、ルーティングが沢山ある場合、手動で設定するのは面倒臭い。だから、自動的(動的)にルーティングをするようにする。
  7. 動的にルーティングする方法は、routeのURL、defの引数、returnの戻り値、これらに「country」と引数を入れておくと、そのURLにアクセスすると

    「america」といれると、「Hello,america」と表示される。カタカナとか、漢字でも大丈夫です。
  8. html変数に、HTMLを書いて返すのはこうやる


    けど、htmlをパイソンファイル(.py)に記載するのは大変。
    そこで、htmlはhtmlファイルを作って、そこに書くのがパイソン!
  9. 「templates」フォルダを作って、その中にhtmlファイルを入れていく。
    templatesというフォルダ名は、パイソンでは決まっている。名前は変更してはいけない。
    「hello.heml」というファイルを作ってみる。
  10. templatesフォルダの「hello.heml」を読み込ませて表示させてみる。
    これで、htmlとパイソンファイルは別々で管理できる。

    今の状態だと、変数をHTMLに渡せてないですよね。これを、パイソンファイルからHTMLファイルに変数を渡して、HTMLファイルで変数表示させていきます。
  11. URLの「city」という変数に、値が入ったら、returnで「html_city」という変数に入れてあげます。すると、templatesフォルダの「hello.html」ファイルの・・・

    「html_city」に渡されて・・・

    URLに記載した「川崎」が、H2タグの「Hello カワサキ in Japan」と表示されます。

HTMLファイルでFor文を回して表示させる

listsというリストに、データを入れておく。
そのlistsをrender_templates関数の引数に、渡してあげる。


「html_list」というリスト名で、htmlファイルに渡ってくる。
それをfor文で回す。
htmlファイルでfor文を回す場合「{% %}」で囲んであげる。書き方は、パイソンと同じだ。
「for 変数名 in リスト名」になる。
変数を使う場合は「{{}}」だ。
「endfor」も必要になるので、これはパイソンと違う書き方なので、覚えておくと良い。

IF文で条件分岐する

パイソンだとenumerate関数使いますが、HTML内では「loop.index」を使います。
for文の現在のインデックス番号が取得できます。
for文同様にif文も「{%%}」の中に入れて、「% endif %」で閉じます。

環境変数を設定する

$env:FLASK_APP = “app.py"

これでapp.pyがフラスクのアプリケーションとして認識される。

デバッグモードでローカルサーバーを起動する

export FLASK_ENV=development

継承

htmlで、ヘッダやフッタで、全ページ使い回したい時がある。
それを使い回すのに「継承」を使う。

継承元HTML(使い回すHTML)ファイルと、継承先HTMLファイルの記載をみてほしい

継承元の記載が以下の画像

継承先には、
{% extends “base.html"%}
と記載する。
これで、base.htmlのHTMLデータをベースに、{%block content%}~{%endblock%}間にindex.htmlに記載したいHTMLデータだけ記載すれば、継承データをベースにいい。

継承完了!

データベース操作をする

サイトに記事を書く。その記事の情報を保存するのに、データベースが必要になる。
なので、データベースの操作を学ぶ!

データベースを操作するには、SQL文というプログラム言語がある。
これを覚えてもいいが、Pythonの記述でSQL文を指示する、「SQLAlchemy(アルケミー)」というライブラリがある。今回使うライブラリは、フラスク用のSQLアルケミーだ。

SQLITEをインストール

https://www.sqlite.org/index.html

SQLアルケミーのインストール

pip install flask_sqlalchemy
とターミナルに入れるとインストールできます。

SQLアルケミーを使ってデータベースを作ります。

from flask_sqlalchemy import SQLAlchemy
app=Flask(__name__)
app.config[“SQLALCHEMY_DATABASE_URI"]="sqlite:///blog.db
db=SQLAlchemy(app)

クラスを使って、データベースを定義する。
以下、簡単なソースコードの説明です。

タイムゾーンを取得するpytzライブラリ
現在日時を取得するdatetimeライブラリ
Integerは数字、primari_keyは主キーにするかどうか。
stringは文字列()は文字数。
nullableは、nullにするかどうか、Falseで空欄はNG。

import pytz
from datetime import datetime

id=db.Column(db.Integer,primary_key=True)
title=db.Column(db.String(50),nullable=False)
body=db.Column(db.String(300).nullable=False)
created_at=db.Column(db.Datetime,nullable=False,default=datetime.now(pytz.timezone(“Asia/Tokyo")

dir

dirコマンドでカレントディレクトリ直下に、app.pyがあるかどうか確認。

python3

python3コマンドで、対話モードにする。

from app import db

app.pyから、dbインスタンスをインポートする。
warningが出てもOK。

db.create_all()

これで、データべースがつくられる。「blog.db」が作られているのが分かる。