12億円ほしい人のブログ

メガBIG当たらないかな

Pythonのimportについてのメモ

Pythonにはimport文が2種類あり、

絶対import

.を使用しない方法。sys.pathで確認できるモジュール検索パスに登録されているパスからimportできる。
なお、sys.pathにはカレントディレクトリが登録されるが、そのパスをもとにimport対象を解決するケースに注意。カレントディレクトリが異なるとModuleNotFoundErrorが発生する。

Pythonの相対インポートで上位ディレクトリ・サブディレクトリを指定 | note.nkmk.me

相対import

.を使用する方法。

参考文献

理解して覚えるpython ~import編~

Pythonの相対インポートで上位ディレクトリ・サブディレクトリを指定 | note.nkmk.me

Pythonでimportの対象ディレクトリのパスを確認・追加(sys.pathなど) | note.nkmk.me

pythonにおける親/兄弟階層のモジュールimportの方法 – rinoguchi's techlog

flask run したときのFlaskのアプリの探し方

flask run --app <application name>でFlaskアプリケーションを実行できますが、アプリケーションであるapp = Flask(__name__)をFlaskがどのように探すかについてです。

msiz07-flask-docs-ja.readthedocs.io

上記に記載の通り、をimportして、自動的に以下のいずれかを探すようです。 - アプリ(appもしくはapplication) - factory(create_appもしくはmake_app)

そのため、以下のチュートリアルアプリの場合は、create_app関数を定義しているので、ここから見つけ出されるようです。

msiz07-flask-docs-ja.readthedocs.io

リダイレクトするとGET?POST?

作成中のFlaskアプリにて、redirect()を使用して指定したURLに遷移させるようにしています。
このとき、「クライアントはページをGETで取得するのかPOSTで取得するのかどっち?」という疑問を持ちました。

ググったところ、以下の記事がヒットしまして、ステータスコードで異なるようですがおおよそGETで取得されるみたいです。

kiririmode.hatenablog.jp

Flaskアプリにて「code 400, message Bad HTTP/0.9 request type」と出た

以下サイトにてFlaskを勉強中のエラー解消の備忘録です。

msiz07-flask-docs-ja.readthedocs.io

以下のコマンドを実行して「Running on http://127.0.0.1:5000」と出たのですが、ctrl + clickすると「このサイトは安全に接続できません」エラー画面になりました。

flask --app flaskr --debug run

悩んだのですが、URLをよく見るとhttpsになってました。 httpに直すと無事アクセスできました。

Flaskチュートリアルのメモ1

以下のサイトでFlaskについて勉強中です。

msiz07-flask-docs-ja.readthedocs.io

サイト内の以下コードについての調査メモです。

import sqlite3

import click
from flask import current_app, g


def get_db():
    if 'db' not in g:
        g.db = sqlite3.connect(
            current_app.config['DATABASE'],
            detect_types=sqlite3.PARSE_DECLTYPES
        )
        g.db.row_factory = sqlite3.Row

    return g.db


def close_db(e=None):
    db = g.pop('db', None)

    if db is not None:
        db.close()

'db' not in g

gはリクエストごとに使用する一時的なデータを格納できるオブジェクトとのこと。
データを、キーと値のペアである辞書として持っている。
辞書のように操作できるように実装されているため、in演算子を使用して'db'キーがあるかを確認できる。

detect_types=sqlite3.PARSE_DECLTYPES

データベースの各列の値の型を自動的に解釈して、適切なPythonの型に変換できるオプション。

g.db.row_factory = sqlite3.Row

SELECTした結果を参照する方法をrow_factoryにて指定できる(?)。
ここにsqlite3.Rowを指定することで、SELECTした行をsqlite3.Rowオブジェクトとして扱える。
sqlite3.Rowとして扱うと、カラム名に基づいて値を参照できる。

sqlite3 --- SQLite データベースに対する DB-API 2.0 インターフェース — Python 3.9.17 ドキュメント

VSCodeのPython用の設定

VSCodePython用の設定を入れたときのメモです。 ただし、Neovim拡張と衝突しそうなので、どこかで整理した方が良いかも。

タブ文字とインデント

ctrl + , > Settings > Open Settings (JSON) にて、以下を追記

  "[python]": {
    "editor.tabSize": 4,
    "editor.insertSpaces": true
  }

これを入れないと、改行したときのインデントが2文字でした。

VSCodeでNeovimを使う

VSCodeでNeovimの拡張機能を使用するための手順メモです。

以下記事を参考に実施しました。

qiita.com

前提

  • PCはWindows11 Home
  • VSCodeは導入済み

Neovimのインストール

以下サイトよりダウンロードして実行。(C:\Program Files\Neovimへインストールされる。)

github.com

PCを再起動

インストール時に、C:\Program Files\Neovim\binへのパスは環境変数に登録されるが、それをPCに反映するため(?)、PCを再起動する

neovimの確認

コマンドプロンプトにてnvimと入力して、neovimが起動することを確認

VSCode Neovim拡張機能のインストール

VSCodeにて以下をインストール

github.com

VSCodeにてNeovim用の設定

冒頭のQiita記事を参考に、以下を実施

  • init.vimを作成
  • 拡張機能の設定」の「Neovim Executable Paths: Win32」を設定
  • 拡張機能の設定」の「Neovim Init Vim Paths: Win32」を設定

TODO