Amer Abdallah نشر 17 سبتمبر 2021 أرسل تقرير نشر 17 سبتمبر 2021 (معدل) أكتب صنف وسيط Middleware وأريد تنفيذه مرة واحدة فقط عند بدء التشغيل. بحيث يقوم هذا لكود بضبط بعض الإعدادات وتهيئة ققاعدة البيانات بشكل معين بدلًا من القيام بهذه المهمة يدويًا عند تشغيل مشروع جانغو Django. كيف أقوم بهذا الأمر في جانغو Django؟ أنا أستخدم الإصدار 1.7 من جانغو Django تم التعديل في 17 سبتمبر 2021 بواسطة Amer Abdallah 2 اقتباس
1 سامح أشرف نشر 17 سبتمبر 2021 أرسل تقرير نشر 17 سبتمبر 2021 لا يجب أن تستخدم Middleware لشيء سوف يتم تشغيله لمرة واحدة. فيمكنك أن تستخدم خطاف hook للقيام بهذا الأمر. للقيام بهذا الأمر في جانغو Django الإصدار 1.7 أو أحدث: أولًا في الملف myapp/apps.py، استخدم الكود التالي: from django.apps import AppConfig class MyAppConfig(AppConfig): name = 'myapp' verbose_name = "My Application" def ready(self): pass # اكتب هنا الكود الذي تريد تنفيذه عند تشغيل الخادم ثانيًا في الملف myapp/__init__.py يجب أن تخبر جانغو Django بأن ينفذ هذا الكود: default_app_config = 'myapp.apps.MyAppConfig' # MyAppConfig يحب أن تكون بنفس اسم الدالة السابقة أما إن كنت تستخدم جانغو Django الإصدار أققل من 1.7، فيمكنك أت تتبع الخطوات التالية: ضع الكود الخاص بك في أي ملف init.py خاص بالتطيقات المثبته INSTALLED_APPS، على سبيل المثال الملف myapp/__ init__.py def startup(): pass # اكتب هنا الكود الذي تريد تنفيذه عند تشغيل الخادم startup() عند تشغيل الخادم من خلال الأمر التالي: ./manage.py runserver يتم تنفيذ هذا الكود مرتين، ولكن هذا لأن runserver يقوم بلتحقق من صحة النماذج أولاً ولحل هذه المشكلة يمكنك تمرير العلم flag الذي --noreload، كالتالي: python manage.py runserver --noreload بهذه الطريقة سوف يتم تنفيذ الكود مرة واحدة فقط. 1 اقتباس
1 Ali Haidar Ahmad نشر 17 سبتمبر 2021 أرسل تقرير نشر 17 سبتمبر 2021 (معدل) كما ذكر سامح.. من أجل Django 1.7+ يجب عليك استخدام الخطاف. ولكن إذا كنت تريد أن يتم استدعاء دالتك فقط عند تشغيل الخادم (وليس عند إجراء migrations ، migrate ، shell ، إلخ.. ) ، وتريد تجنب استثناءات AppRegistryNotReady عليك القيام بما يلي: # الملف: myapp / apps.py import sys from django.apps import AppConfig class AppC(AppConfig): name = 'App' def ready(self): if 'runserver' not in sys.argv: return True # يجب عليك استيراد الوحدات الخاصة بك هنا # لتجنب استثناء AppRegistryNotReady from .models import MyModel # كود بدء التشغيل أيضاً يمكنك استخدام <project> /wsgi.py للقيام بذلك ، وسيتم تشغيله مرة واحدة فقط ، عند بدء تشغيل الخادم ، ولكن ليس عند تشغيل أوامر أو استيراد وحدة معينة: import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings") # كود بدء التشغيل هنا .. .. from django.core.wsgi import get_wsgi_application application = get_wsgi_application() تم التعديل في 17 سبتمبر 2021 بواسطة Ali Haidar Ahmad 1 اقتباس
0 محمد أبو عواد نشر 18 سبتمبر 2021 أرسل تقرير نشر 18 سبتمبر 2021 أنت لا تحتاج الى برمجيات وسيطة "middleware" لتنفيذه لمرة واحدة, تريد تنفيذ التعليمات البرمجية في العناوين ذات المستوى الأعلى الموجودة في الملف urls.py. يتم استيراد هذه الوحدة وتنفيذها مرة واحدة, في ملف urls.py from django.confs.urls.defaults import * from my_app import one_time_startup urlpatterns = ... one_time_startup() 1 اقتباس
السؤال
Amer Abdallah
أكتب صنف وسيط Middleware وأريد تنفيذه مرة واحدة فقط عند بدء التشغيل. بحيث يقوم هذا لكود بضبط بعض الإعدادات وتهيئة ققاعدة البيانات بشكل معين بدلًا من القيام بهذه المهمة يدويًا عند تشغيل مشروع جانغو Django.
كيف أقوم بهذا الأمر في جانغو Django؟
أنا أستخدم الإصدار 1.7 من جانغو Django
تم التعديل في بواسطة Amer Abdallah3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.