2010-06-11 3 views
1

방금 ​​django_digest를 내 응용 프로그램에 통합하기 시작했습니다. 시작으로 저는 @httpdigest 데코레이터를 제 견해 중 하나에 추가했습니다. 연결하려고하면 django_digest/backend/db.py에 KeyError 예외가 발생합니다. 어떤 DB를 구성 하느냐에 따라 다른 위치에 다른 KeyError를 얻습니다. Django 1.2.1을 MySQL (sqlite로 테스트)과 함께 사용하고 있습니다. 모든 설정 옵션에 기본값을 사용하고 있습니다.django-digest의 DB 백엔드에서 KeyError 받기

내가 알 수있는 한, 나는 모든 지시 사항을 따르지만 이것으로 하루 종일 고민 중이다. 나는 django-digest와 python-digest의 저장소 버전을 사용하고있다. 어떤 조종사라도 크게 감사 할 것입니다. MySQL의와

Traceback (most recent call last): 
    File "/home/robm/projects/gcs/server/gcs2.5/lib/python2.5/site-packages/django/core/servers/basehttp.py", line 674, in __call__ 
    return self.application(environ, start_response) 
    File "/home/robm/projects/gcs/server/gcs2.5/lib/python2.5/site-packages/django/core/handlers/wsgi.py", line 248, in __call__ 
    signals.request_finished.send(sender=self.__class__) 
    File "/home/robm/projects/gcs/server/gcs2.5/lib/python2.5/site-packages/django/dispatch/dispatcher.py", line 162, in send 
    response = receiver(signal=self, sender=sender, **named) 
    File "/home/robm/projects/gcs/server/gcs2.5/lib/python2.5/site-packages/django_digest-1.8-py2.5.egg/django_digest/backend/db.py", line 16, in close_connection 
    _connection.close() 
    File "/home/robm/projects/gcs/server/gcs2.5/lib/python2.5/site-packages/django/db/backends/sqlite3/base.py", line 186, in close 
    if self.settings_dict['NAME'] != ":memory:": 
KeyError: 'NAME' 

: sqlite가와

아래 SQLite는과 MySQL을위한

추적 정보

Traceback (most recent call last): 
    File "/home/robm/projects/gcs/server/gcs2.5/lib/python2.5/site-packages/django/core/servers/basehttp.py", line 674, in __call__ 
    return self.application(environ, start_response) 
    File "/home/robm/projects/gcs/server/gcs2.5/lib/python2.5/site-packages/django/core/handlers/wsgi.py", line 241, in __call__ 
    response = self.get_response(request) 
    File "/home/robm/projects/gcs/server/gcs2.5/lib/python2.5/site-packages/django/core/handlers/base.py", line 142, in get_response 
    return self.handle_uncaught_exception(request, resolver, exc_info) 
    File "/home/robm/projects/gcs/server/gcs2.5/lib/python2.5/site-packages/django/core/handlers/base.py", line 166, in handle_uncaught_exception 
    return debug.technical_500_response(request, *exc_info) 
    File "/home/robm/projects/gcs/server/gcs2.5/lib/python2.5/site-packages/django/core/handlers/base.py", line 80, in get_response 
    response = middleware_method(request) 
    File "/home/robm/projects/gcs/server/gcs2.5/lib/python2.5/site-packages/django_digest-1.8-py2.5.egg/django_digest/middleware.py", line 13, in process_request 
    if (not self._authenticator.authenticate(request) and 
    File "/home/robm/projects/gcs/server/gcs2.5/lib/python2.5/site-packages/django_digest-1.8-py2.5.egg/django_digest/__init__.py", line 86, in authenticate 
    partial_digest = self._account_storage.get_partial_digest(digest_response.username) 
    File "/home/robm/projects/gcs/server/gcs2.5/lib/python2.5/site-packages/django_digest-1.8-py2.5.egg/django_digest/backend/db.py", line 97, in get_partial_digest 
    cursor = get_connection().cursor() 
    File "/home/robm/projects/gcs/server/gcs2.5/lib/python2.5/site-packages/django/db/backends/__init__.py", line 75, in cursor 
    cursor = self._cursor() 
    File "/home/robm/projects/gcs/server/gcs2.5/lib/python2.5/site-packages/django/db/backends/mysql/base.py", line 281, in _cursor 
    if settings_dict['USER']: 
KeyError: 'USER' 

업데이트은 - 장고 1.2에 고유 한 것으로 보인다 멀티 데이터베이스 백엔드. 같은 것으로

_connection = backend.DatabaseWrapper({           
     'DATABASE_HOST': settings.DATABASE_HOST,         
     'DATABASE_NAME': settings.DATABASE_NAME,         
     'DATABASE_OPTIONS': settings.DATABASE_OPTIONS,       
     'DATABASE_PASSWORD': settings.DATABASE_PASSWORD,       
     'DATABASE_PORT': settings.DATABASE_PORT,         
     'DATABASE_USER': settings.DATABASE_USER,         
     'TIME_ZONE': settings.TIME_ZONE,           
     })                  

:에서 django_digest의 백엔드/db.py의 데이터베이스 래퍼를 수정

_connection = backend.DatabaseWrapper({ 
       'HOST': settings.DATABASE_HOST, 
       'NAME': settings.DATABASE_NAME, 
       'OPTIONS': settings.DATABASE_OPTIONS, 
       'PASSWORD': settings.DATABASE_PASSWORD, 
       'PORT': settings.DATABASE_PORT, 
       'USER': settings.DATABASE_USER, 
       'TIME_ZONE': settings.TIME_ZONE, 
       }) 

하면 해결됩니다.

지금은 https로 HTTPBasicAuth를 사용하도록 전환했지만 대신 다음 주에 패치를 할 수있는 기회가 주어질 것입니다.

답변

0

그냥 내가 위의 대답은 코멘트에 추가 된 용액을 첨가하고 대답으로이 질문이 표시되도록 (이 올바른 할 것입니까?) :

가이 장고 1.2과 특정 것 같다 멀티 데이터베이스 백엔드. 같은 것으로

_connection = backend.DatabaseWrapper({           
    'DATABASE_HOST': settings.DATABASE_HOST,         
    'DATABASE_NAME': settings.DATABASE_NAME,         
    'DATABASE_OPTIONS': settings.DATABASE_OPTIONS,       
    'DATABASE_PASSWORD': settings.DATABASE_PASSWORD,       
    'DATABASE_PORT': settings.DATABASE_PORT,         
    'DATABASE_USER': settings.DATABASE_USER,         
    'TIME_ZONE': settings.TIME_ZONE,           
    })   

:에서 django_digest의 백엔드/db.py의 데이터베이스 래퍼를 수정

_connection = backend.DatabaseWrapper({ 
      'HOST': settings.DATABASE_HOST, 
      'NAME': settings.DATABASE_NAME, 
      'OPTIONS': settings.DATABASE_OPTIONS, 
      'PASSWORD': settings.DATABASE_PASSWORD, 
      'PORT': settings.DATABASE_PORT, 
      'USER': settings.DATABASE_USER, 
      'TIME_ZONE': settings.TIME_ZONE, 
      }) 

하면 해결됩니다.

관련 문제