APIの勉強(Day5/5)
前回まで、簡単なAPIをFlask上に作成した。
今回は、こちらの記事(
)で、
・POST
・DBへの接続
・レコードの追加・削除
・ログインなど
までを行う。
・POST
※htmlにフォームを用意する。押すとPOSTリクエストが出る?それがapp.pyに伝わる?nameがapp.pyから帰ってきて表示される?
※app.pyではルーティングに/index
にPOSTリクエストが来た場合の処理を追加。
その処理内で、フォームのテキスト要素を取得し、nameとしてhtml側に値を渡す。
・DBへの接続
(any directory)
以下にmodels
フォルダを作成し、その中に__init__.py
、database.py
、models.py
の3ファイルを作成
__init__.py
:中身は空。モジュールを呼び出す際に__init__.pyがないといけないために作成する
database.py
:
テーブルのカラム情報を定義するためのクラスを格納します。
テーブル操作を行う際のレコード生成もこのクラスを通して行います。
今回は神社に対しての「お願い」を格納するためのテーブルを作成したいと思います。
カラム構成は
- ID(int:キー情報)
- title(String(128):お願いのタイトル)
- body(text:お願いの内容)
- date(datetime:お願いの投稿日時) にします。 models.pyを以下のように記載しましょう。
DBとの直接的な接続を確立している。
database.py
と同じパスにonegai.db
というファイルを絶対パスで定義- SQLiteを利用して1.で定義した絶対パスにDBを構築
- DB接続用インスタンスを生成
- Baseオブジェクトを生成して、
- そこにDBの情報を流し込む
※>>> from models.database import init_db >>> init_db()
でエラーが出て、modelsというライブラリが入っていないのではないかとか右往左往。
結論から言うと解決。理由は、models.databaseというのはライブラリではなくて、/models/database.pyのことだった。書き方については以下の記事参照。
セットアップしたSQLiteのDBのonegaicontentsテーブルからレコードを全件引っ張ってきて、Webページに表示させる
・
レコードの追加・削除
・ログイン機能とセッション機能
- ログイン機能
- ユーザ新規登録機能
- ログイン中は左上に常に「{{ユーザ名}}神社」を表示
- ログアウト機能
DBにユーザの名前とパスワードを格納するためのusersテーブルを追加します。
まずmodels.py
にusersテーブルの定義を追加します。
ここで詰まった:
原因=models.pyでclass OnegaiContentsは認識されているのに、class Userが認識されていないために、DBで処理ができていない。
→再起動したら解決した。または、
from models.database import init_db
from models.models import User
init_db()
この順でやらなかったのが問題かもしれない
確かにPWがハッシュ化されている。
・requirements.txt
これだけでよかった
pip freeze > requirements.txtの問題点は以下。
①@以下に自分のPCの環境の絶対パスが入ってしまうため動かない
②不要なライブラリが多すぎる
※しかしデプロイしてみたwebサイトは動かない
これを使ってみたところ、(出てきたファイル自体はダメだったのだが、)
Flaskが必要なことが判明。
入れたら...
できたゾ