أسهل طريقة لكتابة برنامج Python مع إمكانية الوصول إلى وظيفة قاعدة بيانات Django

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

سؤال

لدي موقع ويب يجلب معلومات من RSS Feeds بشكل دوري (حسنًا ، يدويًا حاليًا ، وهذه هي مشكلتي). يتم تنفيذ هذا حاليًا باعتباره منظرًا عاديًا لـ Django ، وهو أمر غير لطيف للغاية في رأيي. أرغب في الحصول على برنامج Python يتم تشغيله باستخدام cronjob بدلاً من زيارة عنوان URL الصحيح يدويًا لتحديث المعلومات.

ما هي أسهل طريقة لجعل برنامج Python يمكن الوصول إلى تطبيق Django الخاص بي و Django orm؟

هل كانت مفيدة؟

المحلول

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)

هكذا فعلت ذلك من أجل كرون تم إرساله عبر البريد الإلكتروني إلى التحديثات اليومية. عاش .py في جذر تطبيق Django الخاص بي ، وبالتالي فإن إعدادات الاستيراد تعكس ذلك وفقًا لذلك.

نصائح أخرى

بديل لجميع الأساليب المقدمة هنا هو كتابة وظيفة cron كعرف ./manage.py أمر. هذا سهل للغاية ، ويمنحك القدرة على القيام به ./manage.py yourcommand إما على سطر الأوامر أو في crontab الخاص بك.

وثائق في هذا الأمر متناثر للغاية ، لكنه يخبرك أن تنظر إلى الكود للأوامر الموجودة ، والتي يمكنك استخدامها كقالب خاص بك.

تعديل: لجانغو 1.7

import os
import django

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

الإئتمان


الإجابة المختارة هي إهمال منذ Django 1.4

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

مصدر: https://stackoverflow.com/a/18760222

تريد شيئًا كهذا في crontab الخاص بك:

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

ثم يجب أن يبدأ نص Python الخاص بك بهذا:

#!/usr/bin/env python

from django.conf import settings

من هناك ، يجب أن تكون قادرًا على استيراد النماذج / المشاهدات / النماذج / أي شيء آخر ، وأن يكون لديك بيئة تمامًا مثل أ ./manage.py shell

ملاحظة: بناءً على كيفية قيامك بالواردات داخل مشروعك ، قد لا يعمل هذا كما هو موضح تمامًا. إذا كنت تقوم دائمًا بشيء مثل "من myproject.myapp.models استيراد *" ، فستريد تعيين خط كرون لتبدو أكثر مثل هذا:

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

أرغب في الحصول على برنامج Python يتم تشغيله باستخدام cronjob بدلاً من زيارة عنوان URL الصحيح يدويًا لتحديث المعلومات.

بديل مبسط: اكتب cronjob إلى تلقائيا "قم بزيارة عنوان URL الصحيح لتحديث المعلومات" - يمكن أن تكون بسيطة مثل أ curl أو wget, ، بعد كل ذلك. هذا لا يجيب على السؤال في العنوان ، ولكن بالنظر إلى الطريقة التي تشرح بها مشكلتك الأساسية الحقيقية ، فقد يكون هذا هو أبسط وأكثر طريقة فورية لحلها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top