私は仕事でパイロンを使用していますが、djangoは初めてです。私はrssフィルタリングアプリケーションを作成しているので、スケジュールに従って実行される2つのバックエンドプロセスが必要です。1つは各ユーザーのrssフィードをクロールし、もう1つはユーザーの過去の設定に対する個々の投稿の関連性を判断します。パイロンでは、そのデータでデータベースを更新するための貼り付けコマンドを作成するだけです。djangoに同等のものはありますか?python manage.py shellEG非対話型モードで同等のものを実行する方法はありますか?
3 に答える
2
それがカスタム管理コマンドの目的だと思います。
于 2010-05-03T07:19:43.350 に答える
1
はい、これが実際にcronバックアップスクリプトを実行する方法です。仮想環境とプロジェクト設定を使用している場合は、virtualenvをロードする必要があります。
私はあなたがこれに従うことができることを願っています、しかし行の後に# manage.py shellあなたはあなたが中にいるかのようにあなたのコードを書くことができますmanage.py shell
次のようにvirtualenvをインポートできます。
import site
site.addsitedir(VIRTUALENV_PATH + '/lib/python2.6/site-packages')
次に、djangoプロジェクトをパスに追加できます
import sys
sys.path.append(DJANGO_ROOT)
sys.path.append(PROJECT_PATH)
次に、django設定とchdirをdjangoプロジェクトにロードします
import os
from django.core.management import setup_environ
from myproject import settings
setup_environ(settings)
os.chdir(PROJECT_PATH)
この時点以降、環境は次のように設定されます。manage.py shell
その後、インタラクティブシェルにいるかのように何でも実行できます。
from application.models import MyModel
for element in MyModel:
element.delete()
これが私のバックアップファイルです。プロセスを関数に抽象化しました。これは名前が付けられ、毎日実行されるフォルダーにdaily_backup入れられます。cron.daily環境をセットアップし、必要に応じて機能を変更する方法を確認できます。
#!/usr/bin/env python
import sys
import os
import site
import logging
from datetime import datetime
PROJECT_NAME = 'myproject'
DJANGO_ROOT = '/var/www/django'
PROJECT_PATH = DJANGO_ROOT + '/' + PROJECT_NAME
VIRTUALENV_PATH = '/var/www/envs/'+ PROJECT_NAME
BACKUP_DIR = '/var/www/backups/%s/daily' % (PROJECT_NAME)
TODAY = datetime.now().strftime('%Y%m%d-%H%M%S')
FILE_NAME = PROJECT_NAME + '_' + TODAY
site.addsitedir(VIRTUALENV_PATH + '/lib/python2.6/site-packages')
sys.path.append(DJANGO_ROOT)
sys.path.append(PROJECT_PATH)
from django.core.management import setup_environ
from myproject import settings
setup_environ(settings)
os.chdir(PROJECT_PATH)
# manage.py shell
from django.conf import settings
logging.basicConfig(level=logging.WARN)
def _setup():
if not os.path.exists(BACKUP_DIR):
logging.debug('Creating backup directory ' + BACKUP_DIR)
os.mkdir(BACKUP_DIR)
os.mkdir(BACKUP_DIR + '/databases')
else:
logging.debug('Using backup directory ' + BACKUP_DIR)
def _remove_old():
logging.debug('Cleaning out old backups')
# keep past 7 days
command = "find %s* -name '%s*' -mtime +7 -exec rm {} \\;" % (BACKUP_DIR, PROJECT_NAME)
os.system(command)
def _create_backup():
logging.debug('Backup database')
if settings.DATABASE_ENGINE == 'mysql':
command = 'mysqldump -u %s --password=%s %s > %s/databases/%s.sql' % (settings.DATABASE_USER, settings.DATABASE_PASSWORD, settings.DATABASE_NAME, BACKUP_DIR, FILE_NAME)
else:
command = '%s/bin/python %s/manage.py dumpdata --indent=4 > %s/databases/%s.json' % (VIRTUALENV_PATH, PROJECT_PATH, BACKUP_DIR, FILE_NAME)
os.system(command)
logging.debug('Backup project')
command = 'tar -czf %s/%s.tgz -C %s %s/' % (BACKUP_DIR, FILE_NAME, DJANGO_ROOT, PROJECT_NAME)
os.system(command)
if __name__ == '__main__':
_setup()
_remove_old()
_create_backup()
于 2010-05-02T20:06:48.063 に答える
0
あなたの人生にいくつかのtwod.wsgiが必要なようです:http://packages.python.org/twod.wsgi/
于 2011-01-14T15:04:51.527 に答える