Exceção do Django: django.core.exceptions.ImproperlyConfigured:

Quando eu executo o mesmo código no django shell ele funciona bem para mim. mas quando eu inicio o interpretador Python (Python 2) para verificar algumas coisas, eu recebo um erro quando tento importar – de django.contrib.auth.models import User

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 = "user@example.com" 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() 

O erro que eu recebo é

  Traceback (most recent call last): File "/edx/app/edxapp/edx-platform/lms/djangoapps/courseware/PCSurvey_email.py", line 4, in  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. 

Qualquer ajuda sobre isso é muito apreciada.

O Django precisa ser configurado, para rodar bem, quando você o executa através do manage.py shell, o manage.py cuida ou configura para você, mas fazê-lo através de um script python, precisa de configuração manual.

Você também parece ter usado seus modelos definidos, para poder importá-los para o seu script python, você precisa adicionar o caminho para a pasta raiz do seu projeto para o caminho atual do python.

Finalmente, você precisa dizer ao django onde está o seu arquivo de configurações ( antes de configurar o seu django), no seu arquivo manage.py, você deve ter algo assim:

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

Vá fazer uma constante, chame-a de * DEFAULT_SETTINGS_MODULE *, então agora você tem:

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

Agora você precisa importar a constante para o seu script e dizer ao django (Configurando um env var) onde ele deve procurar pelo arquivo de configurações.

Então, em todos:

 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() 

Desta forma, você está configurado muito bem.

Quando você abre um shell, o django se configura automaticamente.

Com o interpretador Python, você precisa fazer isso manualmente:

 import django django.setup()