Der einfachste Weg, ein Python-Programm mit Zugriff auf Django Datenbank-Funktionalität zu schreiben
-
21-09-2019 - |
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?
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
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
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.