実にくだらないけど、初心者なのでメモしています。
GITからのアプリ起動
まずはクローンを作って、次にVENVで仮想環境を作る
仮想環境を作ったら、SCRIPTS/BINの中にACTIVATEというバッチファイルがある
これを入れると、(VENV)というカーソルになって仮想環境に入る
あとはREQUIREMENTO.TXTというファイルがあって、これに必要なライブラリが入っているので、PIPでインストール
そしてRUNを実行する
git clone https://github.com/省略/ファイル名.git
cd ファイル名
python3 -m venv venv
source ./venv/bin/activate → ここ間違っているのではないか?
pip install -r requirements.txt
python3 ./run.py
フォルダの構成
ざくっとアプリを見るときは,TREEコマンドで排出するといい。
flaskのアプリは、ちょっと大規模になってくると、app階層化をした方が良さそう
_init_というのが、フォルダで階層化されたときに、イニシャライズされるみたいだ
PYTHONって、そもそもフォルダ自体が、名前を持ったオブジェクトになっている。
これらはすべて、IMPORTすることで、別のモジュールに関数として組み込まれる。(モジュール自体をプログラムとして動作したい場合、例のおまじない_main_を使う)
機能を関数にして、その中にview.pyとmodel.pyを置いている
テンプレートは、各関数の直下に置かれている
これをBLUEPRINTという関数で、ひとつにまとめて、親アプリ化している。
→つまりは、子アプリで開発して、それを上に束ねていくイメージ
C:.
│ .gitignore
│ app.db
│ config.py
│ folder.txt
│ LICENSE
│ README.md
│ requirements.txt
│ run.py
│
├─app
│ │ db_fill.py
│ │ models.py
│ │ __init__.py
│ ├─api
│ │ │ book.py
│ │ │ comment.py
│ │ │ fields.py
│ │ │ log.py
│ │ │ tag.py
│ │ │ user.py
│ │ │ __init__.py
│ ├─main
│ │ │ decorators.py
│ │ │ errors.py
│ │ │ __init__.py
│ │ ├─auth
│ │ │ │ forms.py
│ │ │ │ views.py
│ │ │ │ __init__.py
│ │ │ ├─templates
│ │ │ │ login.html
│ │ │ │ register.html
│ │ ├─comment
│ │ │ │ forms.py
│ │ │ │ views.py
│ │ │ │ __init__.py
│ │ ├─index
│ │ │ │ views.py
│ │ │ │ __init__.py
│ │ │ ├─templates
│ │ │ │ index.html
│ │ ├─log
│ │ │ │ views.py
│ │ │ │ __init__.py
│ │ │ ├─templates
│ │ │ │ logs_info.html
│ │ ├─user
│ │ │ │ forms.py
│ │ │ │ views.py
│ │ │ │ __init__.py
│ │ │ ├─templates
│ │ │ │ user.html
│ │ │ │ 省略
│ ├─static
│ │ ├─css
│ │ │ bootstrap-theme.css
│ │ │ 省略
│ │ │ tokenfield-typeahead.min.css
│ │ ├─fonts
│ │ │ glyphicons-halflings-regular.eot
│ │ │ 省略
│ │ ├─img
│ │ │ logo.png
│ │ │ 省略
│ │ └─js
│ │ bootstrap-tokenfield.js
│ ├─templates
│ │ 404.html
ユーザー認識、ログイン関連
WEBアプリにおける、ややこしい部分を分かりやすく説明する
cookie
クッキーを分かりやすく説明すると、病院の診察券を考えるといいだろう。
患者は病院に行き診察券を預け、病院側は診察券によってカルテを用意したり、待合室への案内を行う。
もしも診察券が無かったら、患者を間違えたり、大変な医療ミスが発生することになる。
def index():
response = make_response(HTMLのテキストデータ)
response.set_cookie(キーワード=値、...)
return response
サーバーからのレスポンスは、ヘッダとHTML本体があり、
cookieはヘッダに書かれる単なるテキストだ。
これは勝手にクライアント側のブラウザに書き込まれて、
次にアクセスすると、リクエストのヘッダの中に、知らぬ間に書かれている
(おそろしや。。。)
def foo():
uid = request.cookies.get('uid', None)
クッキーは辞書型になっていて、こんな感じでIDや名前やパスワードなんかを
やりとりすることができる。
SESSION
もう一つややこしいものに、SESSIONというのがある。
これはお店側が、やってきた客に対して発行するレシートのようなものだ。
たいていのお店は、レシートを持ってこないと返品には応じないだろう。
お店側も、レシートさえ提示してもらえば、それなりにサービス対応ができる。
app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'
from flask import session → sessionはオブジェクト
def index():
check = session.get('key')
ログインしているかを判定する処理を書く
def login():
session['key'] = value →リクエストヘッダなどの値、フォームのIDなど
def logout():
session.pop('key', None) → 破棄する
COOKIEとSESSION
両者の使い分けは下記である。
・COOKIEのパーミッションは、ユーザー側が持っている
・SESSIONのパーミッションは、お店側が持っている。
SESSIONを使うことで、お店側から入場時間などの制限をかけることができる。
お店側で暗号化されているので、ユーザー側では容易に複製できない。
例)イコカの有効期限
COOKIEを使うことで、お客さんを個別に認識できる。
例)病院の診察券
まとめ
こんな感じで、自分が得た知識を、ブログに書くことで整理することも大事
まずは見様見まねで、ベテランのソースを読み解くことから始めている。
(つづく)