Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

初心者向けWEBアプリ開発のコツ(1)

More than 1 year has passed since last update.

実にくだらないけど、初心者なのでメモしています。

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を使うことで、お客さんを個別に認識できる。
例)病院の診察券

まとめ

こんな感じで、自分が得た知識を、ブログに書くことで整理することも大事
まずは見様見まねで、ベテランのソースを読み解くことから始めている。
(つづく)

EasyCording
中国武道研究、AIゼネラリスト、メーカー特許課勤務、AI知財システム開発、FXシステムトレーダ、両利き身体開発 JDLA Deep Learning for GENERAL 2020 #3
http://um6fxh.dsmynas.net/wordpress/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away