2016-08-25 7 views
0

私はdjangoシェルで同じコードを実行すると、うまく動作します。しかし、私はいくつかのことをチェックするためにPythonインタプリタ(パイソン2)を立ち上げてたときに、私はインポートしようとすると、私はエラーを取得する - django.contrib.auth.modelsからは、ユーザーDjango例外: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パスに追加する必要があります。

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

ゴー:

最後に、あなたはあなたの設定ががあなたのmanage.pyファイルで、(前に、あなたのジャンゴを設定)されたファイルのDjangoを伝える必要があり、あなたはこのような何かを持っている必要があります

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

今、あなたはあなたのスクリプトに定数をインポートし、(のenv VARを設定することにより)Djangoに指示する必要があります。ここであなたが今持っているので、それ定数、名前を付け* DEFAULT_SETTINGS_MODULE *作ります設定ファイルを探してください。すべての中のSO

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が自動的に設定されます。 Pythonインタプリタで

手動でこれを実行する必要があります:

import django 
django.setup() 
+0

ありがとうございます。しかし、私は別のエラーがあります。私はコードとエラーを更新しました。 – User

関連する問題