Der einfachste Weg, ein Python-Programm mit Zugriff auf Django Datenbank-Funktionalität zu schreiben

StackOverflow https://stackoverflow.com/questions/1381346

Frage

Ich habe eine Website, die Informationen aus RSS-Feeds holt periodisch (na ja, zur Zeit manuell, und das ist mein Problem). Dieser wird zur Zeit als normale Django Ansicht implementiert, die nicht sehr schön ist meiner Meinung nach. Ich möchte ein Python-Programm haben, die einen Cronjob anstatt manuell besuchen die korrekte URL ausgeführt wird unter Verwendung der Informationen zu aktualisieren.

Was ist der einfachste Weg, um ein Python-Programm zu machen, hat Zugriff auf meine besondere Django-Anwendung und die Django ORM?

War es hilfreich?

Lösung

from django.core.management import setup_environ
from django.core.mail import EmailMultiAlternatives, send_mail
from django.contrib.auth.models import User

import settings
from my.app.models import *

setup_environ(settings)

Dies war, wie ich es für einen cron haben die Parteien täglich Updates per E-Mail. Die Py lebte in der Wurzel meines django app, so dass die Importeinstellungen, dass entsprechend widerspiegeln würden.

Andere Tipps

Eine Alternative zu all den hier gegebenen Ansätze ist Ihre Cron-Job als benutzerdefinierte ./manage.py Befehl zu schreiben. Dies ist sehr einfach zu tun, und gibt Ihnen die Möglichkeit ./manage.py yourcommand entweder auf der Kommandozeile oder in Ihrer crontab zu tun.

Die Dokumentation auf diese sehr spärlich, aber es sagt Ihnen den Code für die bestehenden Befehle suchen, die Sie als Vorlage für Ihre eigenen verwenden können.

Bearbeiten : Für Django 1.7

import os
import django

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project_name.settings")
django.setup()
#have fun

Kredit


Ausgewählte Antwort ist deprecated , da Django 1.4

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project_name.settings")
#from your_app_name import models
##have fun

Quelle: https://stackoverflow.com/a/18760222

Sie wollen etwas in Ihrer crontab:

PYTHONPATH=/path/to/your/project DJANGO_SETTINGS_MODULE=settings myscript.py

Und dann Python-Skript sollte mit diesem starten:

#!/usr/bin/env python

from django.conf import settings

Von dort aus sollten Sie in der Lage sein, Ihre Modelle / Ansichten / Formulare importieren / was auch immer sonst, und eine Umgebung haben ziemlich viel wie ein ./manage.py shell

Hinweis: Je nachdem, wie Sie Ihre Importe in Ihrem Projekt zu tun, kann dies genau nicht funktioniert, wie dargestellt. Wenn Sie immer etwas tun, wie „aus myproject.myapp.models importieren *“, dann werden Sie wollen Satz cron Linie mehr wie folgt aussehen:

PYTHONPATH=/path/to/1_level_before_your_project DJANGO_SETTINGS_MODULE=myproject.settings myscript.py
  

Ich möchte ein Python-Programm haben   die ausgeführt wird, mit einem cronjob statt   von manuell die richtige URL zu besuchen   die Informationen zu aktualisieren.

Eine vereinfachte Alternative: Schreiben Sie einen Cronjob zu automatisch „um die richtige URL besuchen die Informationen zu aktualisieren“ - so einfach wie ein curl oder wget sein könnte, nachdem alle. Dies schließt nicht die Frage im Titel beantworten, aber die Art und Weisen Sie erklären Ihr reales zugrunde liegendes Problem es könnte nur die einfachste und direkteste Ansatz, es zu lösen gegeben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top