1. ホーム
  2. python

[解決済み] Django の例外 : django.core.exceptions.ImproperlyConfigured:

2022-02-14 15:29:51

質問

しかし、Python インタープリタ (Python 2) を起動し、いくつかのことを確認しようとすると、以下のようにインポートしようとするとエラーが発生します: from 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 = "[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.

何かご助言があれば、ぜひお願いします。

解決方法は?

Django をうまく動かすには、設定が必要です。manage.py シェルを通して実行すると、 manage.py が設定をしてくれますが、python スクリプトで実行すると、手動で設定する必要があります。

また、定義したモデルを使用しているようですが、パイソンスクリプトにインポートするためには、プロジェクトのルートフォルダへのパスを現在のパイソンのパスに追加する必要があります。

最後に、djangoにあなたの 設定ファイル は ( 以前 djangoの設定)、manage.pyファイルに、次のようなものがあるはずです。

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

これを定数にし、名前を * DEFAULT_SETTINGS_MODULE * とします。

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

さて、定数をスクリプトにインポートして、設定ファイルを探すべき場所を django に (env var を設定することで) 教える必要があります。

というわけで、全部で

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

この方法でうまくセットアップができました。