プロジェクトのレイアウト — Flask Documentation (1.1.x)
最終的なプロジェクトのレイアウト
flaskr/
、アプリケーションのコードとファイルを含んだPythonのpackage。
flaskr
ディレクトリを作成し
mkdir flaskr
__init__.py
ファイルを追加
__init__.pyの役割=
application factoryを含むことと、Pythonへ
flaskr
ディレクトリをpackageとして扱うように伝えること
flask-tutorial
ディレクトリにいる状態
<flaskrにいると下記エラー出る>
* Serving Flask app 'flaskr' (lazy loading)
* Environment: development
* Debug mode: on
Usage: flask run [OPTIONS]
Error: Could not import 'flaskr.flaskr'.
python - flask.cli.NoAppException: Could not import "flaskr.flaskr" - Stack Overflow
開発モードにする
(ページが例外を起こしたときにはインタラクティブなデバッガを表示し、コードを変更したときにはサーバを再起動
Flaskを実行させたままにしながら、ブラウザのページを再読み込みするだけで済むようにする)
export FLASK_APP=flaskr
export FLASK_ENV=development
↓
* Serving Flask app "flaskr" (lazy loading)
* Environment: development
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with fsevents reloader
* Debugger is active!
* Debugger PIN: 178-620-284
⚠エラー
Import "flask" could not be resolved from source
↓
Stack Overflow有能
python - import flask could not be resolved from source pylance - Stack Overflow
下記のURLでしたら出来た 解決
▶ https://techinscribed.com/python-virtual-environment-in-vscode/
venveで作ったが そもそもanacondaで仮想環境 作っているのに python conda内にpathを通さず?(conda内のを使っておらず) そのためにエラーが出てた模様
データベースへの接続
データベースの定義とアクセス — Flask Documentation (1.1.x)
ユーザ情報と投稿記事を格納するためにSQLiteデータベースを使用していきます。Pythonでは、組み込みのSQLiteサポートのsqlite3
モジュールが一緒に提供されています。▶電子カルテ 等の患者データ(ID、(名前)、年齢(生年月日)、)
データベースへの接続(connection)の作成です。どのような問合せ(queries)や操作(operations)も、connectionを使用しながら実施され、作業が終了した後はconnectionが閉じられ(close)ます。
connectionは典型的にはリクエストと結び付け
リクエスト処理中のどこかの時点で作成され、レスポンスが送信される前に閉じられます。
webアプリケーションでは、connectionは典型的にはリクエストと結び付けられる
アプリケーションへの登録
init-db
コマンドを実行:
=
⚠エラー:AttributeError: 'ellipsis' object has no attribute 'teardown_appcontext'
createが2つあることが原因だった
python - Flask tutorial: AttributeError teardown_appcontext - Stack Overflow
=
instance
フォルダにflaskr.sqlite
ファイルが出来た
Blueprints and Views
アプリケーションへのリクエストに対して応答するために書くコード
受信する(incoming)リクエストのURLを、それを処理すべきviewへと照合するためにパターンを使用
Blueprint
は、関連するviewおよびその他のコードをグループへと編成する方法
Flaskの代わりにそれらをblueprintに登録
Flaskアプリケーションが利用可能になったときに、blueprintをFlaskアプリケーションに登録
アプリケーションの認証のview
テンプレート
ユーザのブラウザに表示するHTMLへ変換(render)するためにテンプレートを使用
jinja {{
と}}
の間のすべてのものが、最終ドキュメントへ出力される式(expression)
{%
と%}
は、if
やfor
のような制御フロー文
-
{% ... %}
for Statements -
{{ ... }}
for Expressions to print to the template output
Template Designer Documentation — Jinja Documentation (3.0.x)
htmlのコメントアウトはjinjaエラー出るのでjinjaのコメントアウト使う
blueprintのテンプレートは(templatesの下の)blueprintと同じ名前のディレクトリに置かれます。
環境の作成
プロジェクトのフォルダと、その中のvenv
フォルダを作成します。
flask- tutorialにて
. venv/bin/activate
http://127.0.0.1:5000/→和訳だとhttpsになっているためつながらない
インストール可能なプロジェクト(Make the Project Installable)
その他のデータが何かを伝えるためには、PythonはMANIFEST.in
というもう一つのファイルを必要
MANIFEST.in
これはPythonに、static
とtemplates
ディレクトリにある全てと、schema.sql
ファイルはコピーし、バイトコードのファイル(訳注:Pythonが実行時に作成・使用する中間ファイル)は除外するように伝えます。
出来た!
なんだかんだ公式チュートリアル?が楽でした
そして英訳のほうがわかりやすい
次は、D-jango
=その他諸々===========================
⚠エラー
Import "flask" could not be resolved from source で調べた結果
【VSCode】importで未解決の警告(import ~ could not be resolved)が出る問題の対策方法 - aburi6800のブログ
公式ドキュメントからコピったのを貼る
{
"python.analysis.extraPaths": ["./sources"]
}
VSCodeを再起動する。
python — Requirements.txtを自動的に作成する
pip install pipreqs
↓
Collecting pipreqs
Downloading pipreqs-0.4.10-py2.py3-none-any.whl (25 kB)
Collecting yarg
Downloading yarg-0.1.9-py2.py3-none-any.whl (19 kB)
Collecting docopt
Downloading docopt-0.6.2.tar.gz (25 kB)
Requirement already satisfied: requests in /Users/○○/opt/anaconda3/lib/python3.8/site-packages (from yarg->pipreqs) (2.24.0)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /Users/○○/opt/anaconda3/lib/python3.8/site-packages (from requests->yarg->pipreqs) (1.25.11)
Requirement already satisfied: certifi>=2017.4.17 in /Users/○○/opt/anaconda3/lib/python3.8/site-packages (from requests->yarg->pipreqs) (2020.6.20)
Requirement already satisfied: idna<3,>=2.5 in /Users/○○/opt/anaconda3/lib/python3.8/site-packages (from requests->yarg->pipreqs) (2.10)
Requirement already satisfied: chardet<4,>=3.0.2 in /Users/○○/opt/anaconda3/lib/python3.8/site-packages (from requests->yarg->pipreqs) (3.0.4)
Building wheels for collected packages: docopt
Building wheel for docopt (setup.py) ... done
Created wheel for docopt: filename=docopt-0.6.2-py2.py3-none-any.whl size=13704 sha256=9a1e75afe94a607297cb47b12f4004c8caf9c89b4c94b3f041f1c7155afe3dd1
Stored in directory: /Users/○○/Library/Caches/pip/wheels/56/ea/58/ead137b087d9e326852a851351d1debf4ada529b6ac0ec4e8c
Successfully built docopt
Installing collected packages: yarg, docopt, pipreqs
Successfully installed docopt-0.6.2 pipreqs-0.4.10 yarg-0.1.9
python — Flask.cli.NoAppException:アプリケーションがクラッシュする
pip3 install -r requirements.txt --ignore-installed
WARNING: You are using pip version 20.1.1; however, version 21.2.3 is available.
You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.8/bin/python3.8 -m pip install --upgrade pip' command.
↓
cd で移動
cd '/Library/Frameworks/Python.framework/Versions/3.8/bin/
pip install --upgrade pip でアップグレード
◎更新
pip install -U sqlalchemy
↓
Requirement already satisfied: sqlalchemy in /Users/◎◎/opt/anaconda3/lib/python3.8/site-packages (1.3.20)
Collecting sqlalchemy
Downloading SQLAlchemy-1.4.22-cp38-cp38-macosx_10_14_x86_64.whl (1.5 MB)
|████████████████████████████████| 1.5 MB 134 kB/s
Collecting greenlet!=0.4.17
Downloading greenlet-1.1.1-cp38-cp38-macosx_10_14_x86_64.whl (87 kB)
|████████████████████████████████| 87 kB 160 kB/s
Installing collected packages: greenlet, sqlalchemy
Attempting uninstall: greenlet
Found existing installation: greenlet 0.4.17
Uninstalling greenlet-0.4.17:
Successfully uninstalled greenlet-0.4.17
Attempting uninstall: sqlalchemy
Found existing installation: SQLAlchemy 1.3.20
Uninstalling SQLAlchemy-1.3.20:
Successfully uninstalled SQLAlchemy-1.3.20
Successfully installed greenlet-1.1.1 sqlalchemy-1.4.22