「Python スクリプトを作成し、そのスクリプトを cron としてインストールします (スクリプトを実行する前に DJANGO _SETTINGS _MODULE 変数をセットアップします)?」
まず、フォームを別のモジュールで宣言してください (例: forms.py
)
次に、次のようなバッチ ローダーを記述できます。(私たちはこれらをたくさん持っています。)
from myapp.forms import MyObjectLoadForm
from myapp.models import MyObject
import xml.etree.ElementTree as ET
def xmlToDict( element ):
return dict(
field1= element.findtext('tag1'),
field2= element.findtext('tag2'),
)
def loadRow( aDict ):
f= MyObjectLoadForm( aDict )
if f.is_valid():
f.save()
def parseAndLoad( someFile ):
doc= ET.parse( someFile ).getroot()
for tag in doc.getiterator( "someTag" )
loadRow( xmlToDict(tag) )
ここには独自の処理がほとんどないことに注意してください。ビュー関数と同じ Form と Model を使用するだけです。
これらのバッチ スクリプトは、アプリケーションのmodels.py
およびforms.py
.
唯一の「興味深い」部分は、XML 行をディクショナリに変換して、Django のフォームとシームレスに連携できるようにすることです。それ以外は、このコマンドライン プログラムはビューと同じ Django コンポーネントをすべて使用します。
これから完全なコマンドライン アプリを作成するために、オプションの解析とログを追加することをお勧めします。また、ロジックの多くが汎用的であることにも気付くでしょうxmlToDict
。真にユニークなのは関数だけです。これらを「ビルダー」と呼び、クラス階層を持っているため、ビルダーはすべてソース ドキュメントから Python 辞書へのポリモーフィック マッピングになります。