为什么django抱怨我还没有设置我的引擎? [英] Why does django complain that I have not set my ENGINE yet?

查看:91
本文介绍了为什么django抱怨我还没有设置我的引擎?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


'default':{
'ENGINE':'django.db.backends.mysql',#添加'postgresql_psycopg2','postgresql ','mysql','sqlite3'或'oracle'。
'NAME':'djangobb',#或使用sqlite3的数据库文件路径。
'USER':'root',#不与sqlite3一起使用。
'PASSWORD':'root',#不与sqlite3一起使用。
'HOST':'',#设置为localhost的空字符串。不适用于sqlite3。
'PORT':'',#设置为空字符串为默认值。不适用于sqlite3。
}
}

任何想法?我无法使用manage.py运行syncdb命令:

 环境:

请求方法:GET
请求URL:http:// localhost:8000 / admin /
Django版本:1.2.1
Python版本:2.5.4
安装的应用程序:
['django .contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib .sitemaps',
'django.contrib.admin',
'django.contrib.admindocs',
'registration',
'django_authopenid',
'djangobb_forum ',
'djapian',
'messages']
安装的中间件:
('django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common .commonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware'
'django.contrib.csrf.middl
'django_authopenid.middleware.OpenIDMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
'django.middleware.transaction.TransactionMiddleware',
' djangobb_forum.middleware.LastLoginMiddleware',
'djangobb_forum.middleware.UsersOnline')


追溯:
文件C:\Python25\Lib\site -packages\django\core\handlers\base.pyin get_response
80. response = middleware_method(request)
文件C:\Python25\Lib\site-packages \django\middleware\locale.pyin process_request
16. language = translation.get_language_from_request(request)
文件C:\Python25\Lib\site-packages\django get_language_from_request
90.返回real_get_language_from_request(请求)
文件C:\PYTHON25\lib\site- packages\\中的\utils\translation\_____ $ _ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 \Lib\site-packages\django\utils\translation\__init __。pyin delayed_loader
36. return getattr(trans,real_name)(* args,** kwargs)
文件C:\Python25\Lib\siteils \django\utils\translation\trans_real.py在get_language_from_request
339. lang_code = request.session.get('django_language',没有)
文件C:\Python25\Lib\site-packages\django\contrib\sessions\backends\base.pyin get
63. return self。 _session.get(key,default)
在_get_session $ b $中的文件C:\Python25\Lib\site- packages\django\contrib\sessions\backends\base.py b 172. self._session_cache = self.load()
文件C:\Python25\Lib\site-p ackages\django\contrib\sessions\backends\db.py加载
20. expire_date__gt = datetime.datetime.now()
文件C:\Python25\lib get
中的\site-packages\django\db\models\manager.py132. return self.get_query_set()。get(* args,** kwargs)
文件 C:\Python25\Lib\site-packages\django\db\models\query.pyin get
336. num = len(clone)
文件C: __len__
中的\Python25\Lib\site-packages\django\db\models\query.py。81. self._result_cache = list(self.iterator())
文件C:\Python25\Lib\site-packages\django\db\models\query.py在迭代器
269.对于compile.results_iter()中的行:
文件C:\Python25\Lib\site-packages\django\db\models\sql\compiler.pyin results_iter
672.对于self.e中的行xecute_sql(MULTI):
在execute_sql
717中的文件C:\Python25\Lib\site- packages\django\db\models\sql\compiler.py。 sql,params = self.as_sql()
文件C:\Python25\Lib\site-packages\django\db\models\sql\compiler.pyin as_sql
56. out_cols = self.get_columns(with_col_aliases)
文件C:\Python25\Lib\site- packages\django\db\models\sql\compiler.py get_columns
185. col_aliases)
文件C:\Python25\Lib\site-packages\django\db\models\sql\compiler.pyin get_default_columns
273. r ='%s。%s'%(qn(alias),qn2(field.column))
文件C:\Python25\Lib\site-packages\django\\ \\ db \models\sql\compiler.pyin quote_name_unless_alias
43. r = self.connection.ops.quote_name(name)
文件C:\\ Python25\lib\site-package\django\db\backends\dummy\base.py在抱怨中
15. raise不正确配置 )

异常类型:/ admin /
异常配置异常值:您尚未设置数据库ENGINE设置。


解决方案

我把我的旧方式和新的方式,所以它不是django-version-specific:

  DATABASE_ENGINE ='django.db.backends.sqlite3'
DATABASE_NAME ='/path/to/db/foo.sqlite3'
DATABASE_USER =''
DATABASE_PASSWORD =''
DATABASE_HOST =''
DATABASE_PORT =''

DATABASES = {
'default':{
'ENGINE':DATABASE_ENGINE,
'NAME':DATABASE_NAME,
'USER':DATABASE_USER,
' PASSWORD':DATABASE_PASSWORD,
'HOST':DATABASE_HOST,
'PORT':DATABASE_PORT,
}
}

但是,我会仔细检查一下您的安装是否是您认为的版本。



更新: p>

您可能正在尝试从管理模块中的设置导入某些内容,并在设置中导入管理模块。有时候,循环导入会导致上述的情况。



特别是,在设置中使用reverse(url-name)可能会导致这一点,因为它最终强制它看起来在某些深层次的网站表中...



更新2:



对不起,解释上述:




  • 循环导入是当模块A从模块B导入时,在某种程度上,模块B还需要模块A.在第二级深度的某个时候,它通常以一些不可估量的方式失败。

  • Reverse()是转换URL名称的函数(name =foo在urls.py中)回到url本身。这使得在设置或管理模块中不总是可以进行呼叫。



更新3:



查看您指出的票据djangobb.org/ticket/81,要打破某些条款,csrf令牌是用于添加跨站点请求伪造防护的模板标签:



http://docs.djangoproject.com / en / dev / ref / contrib / csrf /



它通常看起来像这样,从我的一个项目grep:

 #grep -ri csrf。 
./registration/login.html:< form method =postaction ={%url django.contrib.auth.views.login%}> {%csrf_token%}

关于djapian的中继线,虽然我不知道djapian是我自己,通常意味着直接安装(通常是svn)中继线 - 或最新,检查版本,比任何版本更新,并且可能测试正式版本。通常,这涉及到像 svn checkout http://wherever.com/someproject/trunk/ ./someproject 之类的东西,然后进入该目录进行安装。


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'djangobb',                      # Or path to database file if using sqlite3.
        'USER': 'root',                      # Not used with sqlite3.
        'PASSWORD': 'root',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

Any ideas? I cannot run the syncdb command with manage.py:

    Environment:

Request Method: GET
Request URL: http://localhost:8000/admin/
Django Version: 1.2.1
Python Version: 2.5.4
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.sitemaps',
 'django.contrib.admin',
 'django.contrib.admindocs',
 'registration',
 'django_authopenid',
 'djangobb_forum',
 'djapian',
 'messages']
Installed Middleware:
('django.middleware.cache.UpdateCacheMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.csrf.middleware.CsrfMiddleware',
 'django_authopenid.middleware.OpenIDMiddleware',
 'django.middleware.cache.FetchFromCacheMiddleware',
 'django.middleware.transaction.TransactionMiddleware',
 'djangobb_forum.middleware.LastLoginMiddleware',
 'djangobb_forum.middleware.UsersOnline')


Traceback:
File "C:\Python25\Lib\site-packages\django\core\handlers\base.py" in get_response
  80.                     response = middleware_method(request)
File "C:\Python25\Lib\site-packages\django\middleware\locale.py" in process_request
  16.         language = translation.get_language_from_request(request)
File "C:\Python25\Lib\site-packages\django\utils\translation\__init__.py" in get_language_from_request
  90.     return real_get_language_from_request(request)
File "C:\PYTHON25\lib\site-packages\django\utils\functional.py" in _curried
  55.         return _curried_func(*(args+moreargs), **dict(kwargs, **morekwargs))
File "C:\Python25\Lib\site-packages\django\utils\translation\__init__.py" in delayed_loader
  36.     return getattr(trans, real_name)(*args, **kwargs)
File "C:\Python25\Lib\site-packages\django\utils\translation\trans_real.py" in get_language_from_request
  339.         lang_code = request.session.get('django_language', None)
File "C:\Python25\Lib\site-packages\django\contrib\sessions\backends\base.py" in get
  63.         return self._session.get(key, default)
File "C:\Python25\Lib\site-packages\django\contrib\sessions\backends\base.py" in _get_session
  172.                 self._session_cache = self.load()
File "C:\Python25\Lib\site-packages\django\contrib\sessions\backends\db.py" in load
  20.                 expire_date__gt=datetime.datetime.now()
File "C:\Python25\lib\site-packages\django\db\models\manager.py" in get
  132.         return self.get_query_set().get(*args, **kwargs)
File "C:\Python25\Lib\site-packages\django\db\models\query.py" in get
  336.         num = len(clone)
File "C:\Python25\Lib\site-packages\django\db\models\query.py" in __len__
  81.                 self._result_cache = list(self.iterator())
File "C:\Python25\Lib\site-packages\django\db\models\query.py" in iterator
  269.         for row in compiler.results_iter():
File "C:\Python25\Lib\site-packages\django\db\models\sql\compiler.py" in results_iter
  672.         for rows in self.execute_sql(MULTI):
File "C:\Python25\Lib\site-packages\django\db\models\sql\compiler.py" in execute_sql
  717.             sql, params = self.as_sql()
File "C:\Python25\Lib\site-packages\django\db\models\sql\compiler.py" in as_sql
  56.         out_cols = self.get_columns(with_col_aliases)
File "C:\Python25\Lib\site-packages\django\db\models\sql\compiler.py" in get_columns
  185.                     col_aliases)
File "C:\Python25\Lib\site-packages\django\db\models\sql\compiler.py" in get_default_columns
  273.                 r = '%s.%s' % (qn(alias), qn2(field.column))
File "C:\Python25\Lib\site-packages\django\db\models\sql\compiler.py" in quote_name_unless_alias
  43.         r = self.connection.ops.quote_name(name)
File "C:\Python25\lib\site-packages\django\db\backends\dummy\base.py" in complain
  15.     raise ImproperlyConfigured("You haven't set the database ENGINE setting yet.")

Exception Type: ImproperlyConfigured at /admin/
Exception Value: You haven't set the database ENGINE setting yet.

解决方案

I set mine the old way and the new way, so that it's not django-version-specific:

DATABASE_ENGINE   = 'django.db.backends.sqlite3'
DATABASE_NAME     = '/path/to/db/foo.sqlite3'
DATABASE_USER     = ''
DATABASE_PASSWORD = ''
DATABASE_HOST     = ''
DATABASE_PORT     = ''

DATABASES = {
  'default': {
    'ENGINE':   DATABASE_ENGINE,
    'NAME':     DATABASE_NAME,
    'USER':     DATABASE_USER,
    'PASSWORD': DATABASE_PASSWORD,
    'HOST':     DATABASE_HOST,
    'PORT':     DATABASE_PORT,
  }
}

But yeah, I'd double check that your installation is the version you think.

UPDATE:

You may be trying to import something from settings in an admin module, and importing the admin module in settings. Sometimes circular-imports result in the above.

In particular, using reverse("url-name") within settings can cause this, because it ends up forcing it to look at the "site" table at some deep-dark level...

UPDATE2:

Sorry, to explain the above:

  • A circular import is when a module A imports from module B, and at some level, module B also needs stuff from module A. At some point during that second level of depth, it generally fails in some inscrutable way.
  • Reverse() is the function to turn a url's name (the name="foo" in urls.py) back into the url itself. This makes calls that are not always possible in settings or admin modules.

UPDATE3:

Looking at the ticket djangobb.org/ticket/81 you pointed to, to break some of the terms down, the csrf token is a template tag used to add Cross Site Request Forgery protection:

http://docs.djangoproject.com/en/dev/ref/contrib/csrf/

It generally looks like this, to grep from a project of mine:

# grep -ri csrf .
  ./registration/login.html:  <form method="post" action="{% url django.contrib.auth.views.login %}">{% csrf_token %}

The bit about the trunk of djapian, though I don't know what djapian is myself, generally means a direct install of the (typically svn) trunk -- or "most up to date, checked in version, which is newer than any release, and possibly tested, official version". Typically, this involves doing something like an svn checkout http://wherever.com/someproject/trunk/ ./someproject and then going to that directory to install.

这篇关于为什么django抱怨我还没有设置我的引擎?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆