背景
Djangoでappを作っているんだけど、
- Pythonスクリプトを実行してクローリングして取ってきたデータを
- pythonのスクリプトの中で整形して
- django のDBに保存して利用したい
これが目標なんだけど、ここではPythonからDjangoにアクセスしてDBなり好きなことをするところまでまとめる。
バージョン等
- Django 1.9.2
- python 2.7.10
- Mac OS X
本編へGO
やりたいことは冒頭でも述べたように、pythonのインタラクティブシェルからdjangoのアプリをimportしてそこからいじいじする。
import os,sys,django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "you_apps_name.settings") # *1
sys.path.append(r'/Users/kanuchi34/Projects/python/dj/quotes') # *2
django.setup() # *3
順に注釈をつけていく
注釈 *1
これが詳しく何をやってるかはまだ調べてないんだけど、要するにDJANGOを使うための基本的な情報を提供しているみたい。
なんか実はpythonコードを実行する方法って何個かあるらしくて、そのうちの1つに
manage.py をコードの実行と一緒に呼び出す
みたいな方法がありまして、「きっとこいつが色々な設定を肩代わりしてるんだろうなぁ」と思い覗いてみたら、この *1 のコードがあった
つまりdjangoはdjangoで、pythonの中にあるであろう、DJANGO_SETTING_MODULEを呼び出して、そんでpythonとdjangoを利用できるようにしているんだと思う
注釈 *2
このコードは、着けておいて悪いことはないんだけど、省略することも可能。 pythonパスをappディレクトリ以下の環境に通すために必要らしい。
つあmり、appディレクトリにpythonスクリプトおいて実行すればなくても問題はない
注釈 *3
django.setup()
これをずーっと呼び出すの忘れてて1時間くらいぐぐってた。なんかdjangoの環境のsetuupしてkるえるんだと思う
これをコールしないと、AppDirectryIsntReady みたいなエラー文が出てきて先に進めません
ハマってたところ
この記事で書いた注釈 1のところのyour_apps_name*のところをみんな好き勝手書いてて、これが何を意味してるのか全然わからなかった(初心者あるあるなんだろうな)
1. config.local
2. myproj.settings
3. myapp.settings
4. local
5. config
最終的にmanage.py見てわかったけど、なんかこうこの辺統一できないのかなぁ。。