اذهب إلى المحتوى
  • 0

تشغيل سكريبت Python من خلال Django Shell

Amer Abdallah

السؤال

أحتاج إلى تنفيذسكريبت بلغة Python من خلال Django Shell. حاولت أن أقوم بهذا الأمر بالطريقة التالية:

./manage.py shell << clear_db.py

لكنها لم تنجح. ويتوقع سطر الأوامر كتابة شيء ما.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

يمكنك أن تقوم بذلك من خلال العلامة < بدلًا من << ليصبح الأمر كالتالي:

./manage.py shell < clear_db.py

يمكنك أيضًا أن تقوم بتنفيذ السكريبت من خلال الدالة exec، كالتالي:

$ ./manage.py shell
...
>>> exec(open("./clear_db.py").read())

وإن كنت تستعمل بايثون 2.7 فيمكنك أن تستخدم الدالة execfile، كالتالي:

$ ./manage.py shell
...
>>> execfile('clear_db.py')

إن كنت تستعمل Windows Powershell فسوف تحتاج إلى إستخدام Get-Content:

Get-Content clear_db.py | .\manage.py shell

على العموم لا يُنصح بفعل ذلك من shell - وهذا لأنه لا ينبغي لك تنفيذ سكريبتات عشوائية من بيئة Django (ولكن هناك طرقًا للتغلب على ذلك).

إذا كان هذا السكريبت سيتم تشغيله عدة مرات، فمن الجيد إعداده كأمر مخصص، كالتالي:

./manage.py clear_db

للقيام بذلك، قم بإنشاء ملف باسم clear_db.py في مجلد management، وفي هذا الملف، حدد الأمر المخصص الخاص بك (تأكد من أن اسم الملف هو اسم الأمر الذي تريد التنفيذ منه.):

from django.core.management.base import BaseCommand

class Command(BaseCommand):
    def handle(self, **options):
        # قم بكتابة السكريبت هنا

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

إضافة إلى الطرق التي ذكرها سامح، يمكنك القيام بذلك كالتالي:

import os, django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "app.settings")
django.setup()
# الآن يمكن أن تضع الكود هنا...

وهذه الطريقة تجنبك حدوث بعض الاستثناءات مثل django.core.AppRegistryNoReady
أو:

import sys, os
sys.path.append('/path/to/your/django/app')
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
from django.conf import settings
# أضف ماتريده بعدها

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...