使用python配置eulexistdb会在django设置模块中带来错误

时间:2013-08-15 13:09:10

标签: python xml exist-db

我有以下用python编写的代码,以便使用eulexistdb模块与ExistDB进行通信。

from eulexistdb import db    
class TryExist:    
    def __init__(self):
        self.db = db.ExistDB(server_url="http://localhost:8899/exist")    
    def get_data(self, query):
        result = list()
        qresult = self.db.executeQuery(query)
        hits = self.db.getHits(qresult)
        for i in range(hits):
            result.append(str(self.db.retrieve(qresult, i)))
        return result

quer = '''
let $x:= doc("/db/sample/books.xml")
return $x/bookstore/book/author/text()
'''
a = TryExist()
myres = a.get_data(quer)
print myres

我很惊讶这个代码在Aptana Studio 3中运行良好,为我提供了我想要的输出,但是当从其他IDE运行或使用命令“python.exe myfile.py”时会出现以下错误:

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

我使用自己的localsetting.py来解决问题,使用以下代码:

import os
# must be set before importing anything from django
os.environ['DJANGO_SETTINGS_MODULE'] = 'localsettings'
... writing link for existdb here...

然后我得到错误:

django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.

如何在Django中配置设置以适应ExistDB?请帮帮我..

2 个答案:

答案 0 :(得分:1)

没关系。我从site得到了很少研究的答案。我所做的是创建了一个 localsetting.py 文件,其中包含以下配置。

EXISTDB_SERVER_USER = 'user'
EXISTDB_SERVER_PASSWORD = 'admin'
EXISTDB_SERVER_URL = "http://localhost:8899/exist"
EXISTDB_ROOT_COLLECTION = "/db"

并在我的主文件 myfile.py 中使用:

from localsettings import EXISTDB_SERVER_URL
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'localsettings.py'

并且在类TryExist中我在__ init __()中更改为:

def __init__(self):
        self.db = db.ExistDB(server_url=EXISTDB_SERVER_URL)

PS:仅使用 os.environ ['DJANGO_SETTINGS_MODULE'] ='localsettings'带来 django.core.exceptions.ImproperlyConfigured:SECRET_KEY设置不能为空。

答案 1 :(得分:0)

您的代码在IDE中工作但在命令行中工作的原因可能是您在使用Python环境运行代码方面存在差异。

我做了几个测试:

  1. 安装了eulexistdb的Virtualenv,但不是 Django。 eulexistdb尝试加载django.conf但失败,因此不会尝试从Django配置中获取其配置。最终,您的代码运行没有错误。

  2. Virtualenv与' eulexistdb *and* Django: eulexistdb tries to load django.conf`并获得成功。然后我尝试从Django配置获取配置但是失败。我收到您在问题中描述的相同错误。

  3. 为了防止出现Django安装错误,可以通过添加Django配置来解决问题,就像在accepted self-answer中一样。但是如果您编写的代码没有使用Django,那么有点迂回的方式来运行代码。解决问题的最直接方法是在创建timeout实例的代码中添加ExistDB参数:

        self.db = db.ExistDB(
            server_url="http://localhost:8080/exist", timeout=None)
    

    如果你这样做,那么就不会有任何错误。将timeout设置为None会保留默认行为,但会阻止eulexistdb查找Django配置。