本シリーズのトップページ |
---|
https://qiita.com/robozushi10/items/4559a281d0319eb62c6c |
内容
Gunicorn を使った Django 2.x や 3.0系の環境で、
Django 外部の Python プログラムから Django ORM を使用するコード.
logger も含めて記載している.
本コードが必要になった理由は末尾近くに記載している.
条件
・Gunicorn を使用している
・次のような構成で settings.py が存在している
home
|-- foo
|-- mysite ................... Django プロジェクト
|-- myapp ................ Django アプリ
| |-- models.py
| 略
|-- config
|-- settings.py
|-- urls.py
|-- wsgi.py
略
コード
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# import の例. 参考なので不要なものが多々ある.
import sys; sys.dont_write_bytecode = True
import os, json, time, copy, requests, textwrap, socket, pickle, base64
from datetime import datetime
from pprint import pprint
# Django プロジェクトのパスを import 対象に加える
sys.path.append('/home/foo/mysite')
# Gunicorn なので環境変数を明示的に指定してやる
os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'config.settings')
# myapp/models.py を読み込む
from django.core.wsgi import get_wsgi_application
myapp = get_wsgi_application()
from myapp.models import *
# ロガー設定
from logging import basicConfig, getLogger, DEBUG, ERROR, INFO, WARN, CRITICAL
format = "[%(levelname)s][%(pathname)s:%(lineno)s:%(funcName)s] %(message)s"
basicConfig(level=DEBUG, format=format)
logger = getLogger('django')
if __name__ == "__main__":
# ORM を使う. (下記はクラス Hoge に対する操作である)
objects = Hoge.objects.all()
logger.error(objects)
外部プログラムから ORM 操作が必要になった理由
下図のように Jenkins を介した機構が必要になったため.
参考サイト
URL |
---|
http://blog.shigepon.info/blog/2015/07/28/use-django-model-outside-django-project/#.YRnQnPv7Tbi |