Windows環境でのPython開発設定とDjangoログ・DB権限管理

Windowsでpipのインストールソースを設定する

PyCharmやコマンドプロンプトで共通して有効なpipミラー設定を行うには、以下の手順を実行します。

  1. Win + R%APPDATA% を入力し、エクスプローラーを開く
  2. C:\Users\<ユーザー名>\AppData\Roaming\pip ディレクトリを作成
  3. その中に pip.ini ファイルを作成し、以下を記述
[global]
index-url = https://pypi.douban.com/simple/
trusted-host = pypi.douban.com

ターミナルによるPython仮想環境の管理

Windowsで仮想環境を効率的に扱うため、virtualenvwrapper-win を使用します。

  1. pip install virtualenvwrapper-win を実行
  2. システム環境変数に WORKON_HOME を追加し、値に仮想環境の保存先パス(例: C:\venvs)を指定

主なコマンド:

mkvirtualenv -p python3.6 myproject_env   # Python 3.6の環境作成
workon                                    # 環境一覧表示
workon myproject_env                      # 環境有効化
deactivate                                # 環境終了
rmvirtualenv myproject_env                # 環境削除
pip install django==2.0.7                 # Django 2.0.7をインストール

Djangoプロジェクト構造の整備

「路飛学城」バックエンドプロジェクトのディレクトリ構成は以下の通りです:

luffyapi/
├── logs/                     # ログファイル保存用
├── luffyapi/
│   ├── apps/                 # アプリケーションモジュール
│   ├── libs/                 # サードパーティライブラリ
│   ├── settings/
│   │   ├── dev_settings.py   # 開発用設定
│   │   └── prod_settings.py  # 本番用設定
│   ├── utils/                # 共通ユーティリティ
│   ├── urls.py               # ルートURL設定
│   └── wsgi.py
├── scripts/                  # 開発用スクリプト
├── dev_manage.py             # 開発サーバ起動用
└── prod_manage.py            # 本番サーバ起動用

BASE_DIRの修正とアプリパスの追加

開発設定ファイルでプロジェクトルートを正しく認識させ、カスタムアプリをモジュール検索パスに追加します。

# luffyapi/luffyapi/settings/dev_settings.py
import os
import sys

BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
sys.path.insert(0, os.path.join(BASE_DIR, 'luffyapi', 'apps'))

Djangoのカスタムロギング設定

コンソール出力とファイル出力の両方に対応したロギング設定を追加します。

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '{levelname} {asctime} {module} {lineno} {message}',
            'style': '{',
        },
        'simple': {
            'format': '{levelname} {module} {lineno} {message}',
            'style': '{',
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'simple',
        },
        'file': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(BASE_DIR, 'logs', 'luffy.log'),
            'maxBytes': 300 * 1024 * 1024,
            'backupCount': 10,
            'formatter': 'verbose',
            'encoding': 'utf-8',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console', 'file'],
            'level': 'INFO',
            'propagate': True,
        },
    },
}

loggingモジュールによる例外記録

カスタム例外ハンドラ内でDjangoロガーを使用してエラー情報を記録します。

# luffyapi/utils/logger_config.py
import logging
logger = logging.getLogger('django')

# luffyapi/utils/exception_handler.py
from rest_framework.views import exception_handler as drf_exception_handler
from .logger_config import logger

def custom_exception_handler(exc, context):
    response = drf_exception_handler(exc, context)
    if response is not None:
        logger.error(f"API Exception: {response.data.get('detail', str(exc))}")
    return response

# settings/dev_settings.py
REST_FRAMEWORK = {
    'EXCEPTION_HANDLER': 'luffyapi.utils.exception_handler.custom_exception_handler'
}

データベースユーザーと権限の管理

MySQLにおけるユーザー管理と権限付与の手順です。

  1. rootユーザーでMySQLにログイン
  2. 既存ユーザー確認: SELECT user, host FROM mysql.user;
  3. 新規ユーザー作成と権限付与:
    CREATE USER 'cql'@'%' IDENTIFIED BY 'Cql123456';
    GRANT ALL PRIVILEGES ON luffy.* TO 'cql'@'%';
  4. 権限反映: FLUSH PRIVILEGES;

タグ: Python Django MySQL logging virtualenv

7月29日 20:44 投稿