Flask Tutorial やったらまたハマった話(マイクロブログ作成編)
こんばんは。今日は勉強ログです。前回の続きです。
前回のあらすじ
前回ふと思いたちFlask Tutorialを始めたものの、環境構築でめちゃくちゃつまづいて、それを解決したところまでで終了してます。 今回はこの章を終わらせようと思っています。
2. Flaskチュートリアル — study flask 1 ドキュメント
今回やったこと
- flaskrというマイクロブログアプリ?の開発準備
- flaskrの最低限の機能開発(投稿機能+表示機能)
ひっかかったところ
今回は1箇所だけ引っかかったものの、他はすいすいと進みましたので、躓いたところだけ紹介します。 今回ひっかかったのは「データベース連携の部分(FlaskでSQLAlchemyを利用するのにつまづいた)」でした。
チュートリアルでいうと、Step1のこの超序盤。
ここで散々ひっかかりました。
前提条件
まずはStep1を記載の通りにコピペして、実行もチュートリアル通り進めました。 エラーが出たのは「from flaskr.models import init」の実行時です。
ちなみにinit.pyの中身はこの通り。
from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy app = Flask(__name__) app.config.from_object('flaskr.config') db = SQLAlchemy(app) import flaskr.views
エラー1
>>> from flaskr.models import init Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/taikomegane/tutorial/flaskr/__init__.py", line 2, in <module> from flask.ext.sqlalchemy import SQLAlchemy ModuleNotFoundError: No module named 'flask.ext'
なるほど。init.pyの2行目でインポートしている部分、flask.extなんてものはないとのこと。
エラー2
ちょっと勘で次のように書き換える。
from flask import Flask from sqlalchemy import SQLAlchemy (あとは同じ)
まあ勘だから期待してないものの、念の為実行。
>>> from flaskr.models import init Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/taikomegane/tutorial/flaskr/__init__.py", line 2, in <module> from sqlalchemy import SQLAlchemy ImportError: cannot import name 'SQLAlchemy'
勘でやった割にはエラーが変わっている。sqlalchemyはあるけど、SQLAlchemyなんて名前のものはインポートできないそう。
エラー3
勘でやったエラー2は無視して、エラー1のコードを調べてみるとこんな記事が。
どうも次のように書き換えればいけるらしいので、修正する。
from flask import Flask from flask_sqlalchemy import SQLAlchemy (あとは同じ)
これでいけるはずと期待して実行するも下記。
>>> from flaskr.models import init /usr/local/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py:794: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True or False to suppress this warning. 'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '
また出来ない!と嘆きながらエラーコードを調べる。
正解
実はエラー3はエラーではなくwarningとのこと。確かにエラー文よく見ると書いてある。
Flaskにさわってみた | blog.PanicBlanket.com
こちらの記事に書いてあるように、config.pyで許可を出してあげればいけるらしい。
SQLALCHEMY_DATABASE_URI = 'sqlite:///flaskr.db' SECRET_KEY = 'secret key' SQLALCHEMY_TRACK_MODIFICATIONS = True
こんな感じで「SQLALCHEMY_TRACK_MODIFICATIONS = True」を一文追加して改めて実行する。
>>> from flaskr.models import init >>> init()
無事エラー出ない!これで解決した。
今日の成果
上のえラーで躓いた以外は特に問題なく2章は終了。今画面はこんな感じ。
ちなみにですが、Dockerからこの環境にアクセスしているので、manage.pyの中身は書き換えてます。これが後々のエラーにつながらなければいいけど。 詳しくはこちら
またこの状態になってると、一つ一つのアクションにステータスコードが返ってきて楽しい。
ちょうど今「WEBを支える技術」という本でステータスコードについて勉強したところなので、こういう実際に動いているシステムで確認ができるのはいいね。
Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)
- 作者: 山本陽平
- 出版社/メーカー: 技術評論社
- 発売日: 2010/04/08
- メディア: 単行本(ソフトカバー)
- 購入: 143人 クリック: 4,320回
- この商品を含むブログ (183件) を見る
それでは本日はここまで。また続き頑張っていきます。 最後までお付き合いいただきありがとうございました。