【问题标题】:Django exception : django.core.exceptions.ImproperlyConfigured:Django 异常:django.core.exceptions.ImproperlyConfigured:
【发布时间】:2021-11-06 23:54:25
【问题描述】:

当我在 django shell 中运行相同的代码时,它对我来说很好。但是当我启动 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 = "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()

我得到的错误是

    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.

非常感谢您对此的任何帮助。

【问题讨论】:

    标签: python django


    【解决方案1】:

    Django 需要设置才能正常运行,当您通过 manage.py shell 运行它时,manage.py 会为您处理或设置它,但是通过 python 脚本执行此操作需要手动设置。

    您似乎也使用了您定义的模型,为了能够将它们导入您的python脚本,您需要将项目根文件夹的路径添加到当前的python路径。

    最后,你需要告诉 django 你的 settings 文件 在哪里(在设置你的 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() 
    

    这样你就设置好了。

    【讨论】:

    • 但是我应该把所有这些代码放在哪里?新文件 ?什么文件夹?
    • @NestorColt 在您运行的 shell 中,或在您的 manage.py 或任何正在运行的脚本中,例如“python 脚本”,而不是“python manage.py 脚本”。
    【解决方案2】:

    对于提出这个问题的新用户。 如果您不想按照@SpiXel 的精彩描述手动设置 django 设置文件 你可以从项目目录运行python manage.py shell,它基本上会自动链接django需要的设置文件。

    【讨论】:

    • 我猜这听起来更容易。
    【解决方案3】:

    当您打开 shell 时,django 会自动设置自己。

    使用 Python 解释器,您必须手动执行此操作:

    import django
    django.setup()
    

    【讨论】:

      【解决方案4】:

      只是一个简单的解决方案,所有人都可以尝试!

      我尝试仅使用以下方式在 shell 中运行我的自定义脚本:

      python manage.py shell < /path_to_script
      

      【讨论】:

        猜你喜欢
        • 2017-09-22
        • 2014-11-24
        • 2015-05-25
        • 2015-08-12
        • 2012-05-26
        • 1970-01-01
        • 1970-01-01
        • 2015-08-22
        • 2014-01-22
        相关资源
        最近更新 更多