2016-08-25 6 views
0

Когда я запускаю тот же код в оболочке django, он отлично работает для меня. но когда я запустить интерпретатор Python (Python 2), чтобы проверить некоторые вещи, я получаю ошибку, когда я пытаюсь импортирующей - от django.contrib.auth.models импорта ПользовательDjango exception: django.core.exceptions.ImproperlyConfigured:

import os 
import django 
django.setup() 
import smtplib 
import sys 
sys.path.insert(0, "/edx/app/edxapp/edx-platform/lms/djangoapps/courseware") 
import dateutil.relativedelta 

from django.conf import settings 
from django.contrib.auth.models import User 
from opaque_keys.edx.keys import CourseKey 
from courseware.models import StudentModule 

from datetime import datetime 



def PCSurvey_email(): 
    for student in StudentModule.objects.filter(module_type="PCSurvey"): 
     two_months_date = datetime.now().date() - dateutil.relativedelta.relativedelta(months=2) 
     created = student.created.date() 
     if created == two_months_date : 
      user_id = student.student_id 
      user_email = User.objects.get(id = user_id).email 
      FROM = "[email protected]" 
      TO = [user_email] # must be a list 
      SUBJECT = "Hello!" 
      TEXT = "This message was sent with Python's smtplib." 
         # Prepare actual message 

      message = """\ 
      From: %s 
      To: %s 
      Subject: %s 
      %s 
      """ % (FROM, ", ".join(TO), SUBJECT, TEXT) 

       # Send the mail 

      server = smtplib.SMTP('outlook.net') 
      server.sendmail(FROM, TO, message) 
      server.quit() 

    #deleting the module 
      smod = StudentModule.objects.get(module_type="PCSurvey", course_id = student.course_id, student_id= student.student_id) 
      smod.delete() 

ошибка, что я получаю

Traceback (most recent call last): 
    File "/edx/app/edxapp/edx-platform/lms/djangoapps/courseware/PCSurvey_email.py", line 4, in <module> 
    django.setup() 
    File "/usr/local/lib/python2.7/dist-packages/django/__init__.py", line 22, in setup 
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING) 
    File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 53, in __getattr__ 
    self._setup(name) 
    File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 39, in _setup 
    % (desc, ENVIRONMENT_VARIABLE)) 
django.core.exceptions.ImproperlyConfigured: Requested setting LOGGING_CONFIG, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings. 

Любая помощь по этому поводу очень ценится.

ответ

3

Django должен быть установлен для того, чтобы работать нормально, когда вы запускаете его через manage.py оболочки, manage.py ухаживает или настройки это для вас, но выполнение этого с помощью скрипта python требует ручной настройки.

Возможно, вы использовали свои определенные модели, чтобы импортировать их в свой скрипт python, вам нужно добавить путь к корневой папке вашего проекта к текущему пути python.

Наконец, нужно сказать, где Джанго подать ваши настройки является (перед тем настройки вашего Джанго), в вашем файле manage.py, вы должны иметь что-то вроде этого:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings") 

Перейти сделать его постоянным, имя его * DEFAULT_SETTINGS_MODULE *, так что теперь у вас есть:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", DEFAULT_SETTINGS_MODULE) 

Теперь вам нужно импортировать константу в сценарий и сказать Джанго (путем установки ENV вар), где он должен искать файл настроек.

Так всего:

import sys, os 
sys.path.insert(0, "/path/to/parent/of/courseware") # /home/projects/my-djproj 

from manage import DEFAULT_SETTINGS_MODULE 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", DEFAULT_SETTINGS_MODULE) 

import django 
django.setup() 

Таким образом, вы настройки просто отлично.

+0

Спасибо. Но у меня другая ошибка. Я обновил код, а также ошибку. – User

+0

@User Хорошо, обновленный ответ – SpiXel

+0

Спасибо. Это помогло – User

1

Когда вы открываете оболочку, django автоматически устанавливает себя.

С интерпретатора вы должны сделать это вручную:

import django 
django.setup() 
+0

спасибо. Но у меня другая ошибка. Я обновил код, а также ошибку. – User

Смежные вопросы