【问题标题】:ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configuredImproperlyConfigured:请求设置 DEFAULT_INDEX_TABLESPACE,但未配置设置
【发布时间】:2016-02-20 23:11:01
【问题描述】:

我正在尝试将 SMTP 实时服务器作为 django 中的单独应用程序。每当我尝试运行 smtp 文件 python smtp.py 来监听传入消息并将它们存储在模型中时,我都会收到 ImproperlyConfigured 错误。

smtp.py

import os
import smtpd
import asyncore
import datetime
from models import IncomingEmail
from email.parser import Parser

class MessageServer():
    def __call__(self, peer, mailfrom, recipients, data):

        email = Parser().parsestr(data)

        incomingDb = IncomingEmail(
                sender=mailfrom, recipient=recipients,
                message=data, subject=email['subject'],
                recevied=datetime.datetime.now()
                )
        incomingDb.save()

class customSMTPServer(smtpd.SMTPServer):
    process_message = MessageServer()

if __name__ ==  "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "hello.settings")
    server = customSMTPServer(('localhost', 1025), None)
    print "Started listening at port 1025"
    try:
        asyncore.loop()
    except KeyboardInterrupt:
        server.close()

项目结构:

hello/
 manage.py
 hello/
  __init__.py
  settings.py
  urls.py
  wsgi.py
 smtp/
  smtp.py
  models.py
  __init__.py
 api/
  admin.py
  apps.py
  urls.py
  views.py

错误:

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environ
ment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

【问题讨论】:

    标签: python django smtp


    【解决方案1】:

    您似乎遇到了该错误,因为 DB 引擎缺少一些重要设置。 如果您像这样编辑代码会怎样?

    import sys, os
    sys.path.append('/path/to/your/app')
    os.environ['DJANGO_SETTINGS_MODULE'] = 'hello.settings'
    from django.conf import settings
    print "Started listening at port 1025"
    ...
    

    或者另一种方法是尝试将os.environ.setdefault("DJANGO_SETTINGS_MODULE", "hello.settings") 移动到文件顶部(当然是在导入os 之后) 另一个有点脏的黑客是:

    if __name__ == "__main__":
        from django.core.management import execute_from_command_line    
        execute_from_command_line(sys.argv)
    

    接下来你可以尝试:

    $ ./manage.py shell
    ...
    >>> execfile('your_script.py')
    

    还有,哪一行会抛出异常?

    【讨论】:

    • 它没有用,我也遇到了同样的异常。我还尝试将环境变量设置为 hello.settings 并得到ImportError: No module named hello.settings
    • 是否可以在 django 中将 SMTP 服务器作为单独的应用程序?我已经更新了这个问题,希望这能让您更好地了解该项目。
    • 您需要将 smtp 服务器作为单个应用程序吗?
    • 我正在尝试在 django 中实现这个项目link。这是我在 django 的第一个大项目,到目前为止我已经学到了很多东西。您如何建议在 django 中构建 smtp 服务器?
    猜你喜欢
    • 2017-10-21
    • 2013-03-22
    • 2018-10-09
    • 2019-12-02
    • 1970-01-01
    • 2018-05-15
    • 2020-09-27
    • 2018-05-21
    • 2020-04-12
    相关资源
    最近更新 更多