البرمجة

ضمان الاستدامة في تحويلات Django

في Django، وظيفة atomic() تسمح بتضمين العمليات القاعدية في بلوكات ذات نطاق متفاوت، وهذا يعني أنه يمكن تضمين بلوك atomic() داخل آخر. ومع ذلك، هذا السلوك ليس دائمًا ما يتناسب مع متطلبات التطبيق. بعض المطورين يرغبون في ضمان أن عملية النقل تكتمل بنجاح قبل أن تُطبَّق التعديلات القاعدية، وهذا يتنافى مع السلوك الافتراضي للدالة atomic().

توفر Django خيارًا لتحقيق هذا السلوك المطلوب بواسطة استخدام transaction.set_autocommit(False) لتعطيل النقل التلقائي، ثم يمكن تنفيذ العمليات القاعدية بشكل منفصل داخل بلوك try/except، وعند الانتهاء يمكن تنفيذ transaction.commit() لتأكيد النقل أو transaction.rollback() في حالة الفشل.

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

  1. قم بتعطيل النقل التلقائي باستخدام transaction.set_autocommit(False).

  2. قم بتنفيذ العمليات القاعدية داخل بلوك try/except للتحكم في تنفيذ commit() أو rollback().

  3. في حالة النجاح، استدعاء transaction.commit() لتأكيد النقل، وإلا استدعاء transaction.rollback() للتراجع عن التعديلات.

وهكذا، يتمكن المطورون من ضمان الاستدامة (Durability) للتحويلات في Django دون الحاجة إلى تضمين العمليات داخل بعضها البعض بطريقة متداخلة.

المزيد من المعلومات

بما أننا نعرف أن تأمين الاستدامة (Durability) للتحويلات في Django يتطلب استراتيجية مختلفة عن السلوك الافتراضي للدالة atomic()، دعنا نتوغل في تفاصيل الطريقة المقترحة لتحقيق هذا الهدف.

للبداية، يجب علينا تعطيل النقل التلقائي باستخدام transaction.set_autocommit(False) قبل تنفيذ أي عملية قاعدية. هذا يضمن أن التغييرات لن تُطبَّق تلقائيًا بمجرد انتهاء كل بيان SQL، بل سيتم انتظار تأكيد المطور.

ثم، يمكننا تنفيذ العمليات القاعدية داخل بلوك try/except للتحكم في تطبيق commit() في حالة النجاح أو rollback() في حالة الفشل. هذا يسمح بمعالجة الأخطاء بشكل دقيق وتجنب التأثيرات الجانبية الغير مرغوب فيها.

على سبيل المثال، يمكن أن يبدو الكود كما يلي:

python
from django.db import transaction # تعطيل النقل التلقائي transaction.set_autocommit(False) try: # تنفيذ العمليات القاعدية هنا # مثال: نقل الأموال بين حسابات المستخدمين # transfer_money(from_account, to_account, amount) # تأكيد النقل transaction.commit() except Exception as e: # في حالة حدوث خطأ، قم بالتراجع عن التعديلات transaction.rollback() # يمكن معالجة الخطأ هنا أو رفعه للمستوى العلوي raise e finally: # استعادة النقل التلقائي transaction.set_autocommit(True)

هذا النهج يضمن تحقيق الاستدامة (Durability) من خلال تأكيد التحولات فقط بعد التحقق من نجاح كل العمليات ذات الصلة وتجنب القيام بذلك تلقائيًا بمجرد انتهاء الكلمات الأساسية SQL. بالتالي، يمكن للمطورين الاستمتاع بمزيد من السيطرة والتحكم في سير العملية وضمان الاستدامة في تطبيقات Django الخاصة بهم.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

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