python كيفية تعبئة نموذج جانغو خارجيا؟




django django-models (4)

ما هي أفضل فكرة لملء البيانات في نموذج جانغو من مصدر خارجي؟

على سبيل المثال لدي نموذج تشغيل، ويدير البيانات في ملف شمل، الذي يتغير أسبوعيا.

يجب أن إنشاء وجهة نظر ورل هذا الرأي من كرونجوب حليقة (مع ميزة أن تلك البيانات يمكن قراءتها في أي وقت، وليس فقط عندما يعمل كرونجوب)، أو إنشاء النصي الثعبان وتثبيت هذا البرنامج النصي كرون (مع دجانغو _SETTINGS _MODULE الإعداد المتغير قبل تنفيذ البرنامج النصي)؟

https://code.i-harness.com


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

إذا ذهبت إلى مسار العرض، قد يكون من المفيد النظر في وجهة النظر التي تقبل ملف شمل نفسه عبر هتب بوست. إذا كان ذلك منطقيا للبيانات الخاصة بك (أنت لا تعطي الكثير من المعلومات حول ملف شمل هذا)، فإنه لا يزال يعمل من كرون، ولكن يمكن أيضا قبول تحميل من متصفح - من المحتمل السماح للشخص الذي ينتج ملف شمل بتحديث دب في حد ذاتها. هذا هو فوز كبير إذا كنت لا واحد جعل ملف شمل، والذي هو الحال عادة في تجربتي.


هناك طريقة ممتازة للقيام ببعض الوظائف مثل الصيانة في بيئة المشروع - كتابة أمر إدارة . py.py مخصص . فإنه يأخذ كل تكوين البيئة وغيرها من الاشياء يسمح لك التركيز على مهمة ملموسة.

وبالطبع نسميها مباشرة من قبل كرون.


"إنشاء النصي الثعبان وتثبيت هذا البرنامج النصي كرون (مع دجانغو _SETTINGS _MODULE الإعداد المتغير قبل تنفيذ البرنامج النصي)؟"

أولا، تأكد من الإعلان عن النماذج في وحدة منفصلة (مثل forms.py )

ثم، يمكنك كتابة لوادر دفعة التي تبدو مثل هذا. (لدينا الكثير من هذه.)

from myapp.forms import MyObjectLoadForm
from myapp.models import MyObject
import xml.etree.ElementTree as ET

def xmlToDict( element ):
    return dict(
        field1= element.findtext('tag1'),
        field2= element.findtext('tag2'),
    )

def loadRow( aDict ):
     f= MyObjectLoadForm( aDict )
     if f.is_valid():
         f.save()

def parseAndLoad( someFile ):
    doc= ET.parse( someFile ).getroot()
    for tag in doc.getiterator( "someTag" )
        loadRow( xmlToDict(tag) )

لاحظ أن هناك معالجة فريدة جدا هنا - يستخدم فقط النموذج والنموذج نفسه وظائف العرض الخاص بك.

وضعنا هذه البرامج النصية دفعة في مع تطبيق جانغو لدينا، لأنه يعتمد على التطبيق. models.py و forms.py

الجزء "مثيرة للاهتمام" الوحيد هو تحويل صف شمل الخاص بك إلى القاموس بحيث يعمل بسلاسة مع أشكال جانغو. بخلاف ذلك، يستخدم برنامج سطر الأوامر كل مكونات دجانغو نفسها كطريقة العرض.

ستحتاج على الأرجح إلى إضافة خيارات تحليل وتسجيل لجعل التطبيق سطر الأوامر كاملة للخروج من هذا. ستلاحظ أيضا أن الكثير من المنطق هو عام - فقط وظيفة xmlToDict هي فريدة من نوعها حقا. ونحن نسمي هذه "بناة" ويكون التسلسل الهرمي الطبقة بحيث بناة لدينا هي تعيينات متعددة الأشكال من وثائق المصدر لدينا إلى قواميس بايثون.


أنت لا تحتاج إلى إنشاء طريقة عرض، يجب عليك فقط تشغيل النصي بيثون مع إعدادات بيئة دجانغو تكوينها . ثم استدعاء النماذج الخاصة بك مباشرة بالطريقة التي كنت إذا كنت تستخدم وجهة نظر، معالجة البيانات الخاصة بك، إضافته إلى النموذج الخاص بك، ثم .save () نموذج لقاعدة البيانات.





django-models