crontab からニュースレターを毎日送信する関数を作成する必要があります。インターネットでこれを行う2つの方法を見つけました:
最初 - django プロジェクト フォルダーに配置されたファイル:
#! /usr/bin/env python
import sys
import os
from django.core.management import setup_environ
import settings
setup_environ(settings)
from django.core.mail import send_mail
from project.newsletter.models import Newsletter, Address
def main(argv=None):
if argv is None:
argv = sys.argv
newsletters = Newsletter.objects.filter(sent=False)
message = 'Your newsletter.'
adr = Address.objects.all()
for a in adr:
for n in newsletters:
send_mail('System report',message, a ,['user@example.com'])
if __name__ == '__main__':
main()
それが機能するかどうかはわかりませんし、実行する方法もわかりません。それがrun.pyと呼ばれているとしましょう。それで、cronで呼び出す必要があり0 0 * * * python /path/to/project/run.py
ますか?
2 番目の解決策 - send 関数を任意の場所に作成し (通常の django 関数と同じように)、run.py スクリプトを作成します。
import sys
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
module_name = sys.argv[1]
function_name = ' '.join(sys.argv[2:])
exec('import %s' % module_name)
exec('%s.%s' % (module_name, function_name))
そして、cron呼び出しで:0 0 * * * python /path/to/project/run.py newsletter.views daily_job()
どちらの方法が機能しますか、またはどちらが優れていますか?