2014-07-08 5 views
2

나는 django (mongodb)를 사용하여 사용자 정의 사용자 인증 및 권한 부여 응용 프로그램을 구현하려고했습니다.Django-Mongodb : ConnectionError on 세션 변수 설정

세션 변수를 설정하는 중 연결 오류가 발생했습니다. 왜 이런 일이 일어나는지 알 수 없었습니다. 이 점을 이해하도록 도와주세요.

Setting.py

AUTHENTICATION_BACKENDS = (

    'mongoengine.django.auth.MongoEngineBackend', 
) 

SESSION_ENGINE = 'mongoengine.django.sessions' 
# AUTH_USER_MODEL = 'mongo_auth.MongoUser' 


TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.request", 
    "allauth.account.context_processors.account", 
    "allauth.socialaccount.context_processors.socialaccount", 
    'django.contrib.auth.context_processors.auth', 
) 

INSTALLED_APPS = (
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'mongoTest', 
    'admin', 
) 

view.py

db = Connection().sms 
... 
def login(request): 
    form = LoginForm() 
    context_dict = {"form": form} 

    if request.POST: 
     form = LoginForm(request.POST) 
     if form.is_valid(): 
      p = db.user.find_one({ 
       "email": form.cleaned_data["email"], 
       "password": form.cleaned_data["password"] 
      }) 

      if p: 
       request.session['member_id'] = p["_id"] 

       context_dict["message"] = "Successfully Login" 
       # request.session.set_test_cookie() 
       return render(request, "admin/profile.html", context_dict) 

      context_dict['message'] = "Your username and password didn't match." 
      return render(request, "admin/login.html", context_dict) 

    return render(request, "admin/login.html", context_dict) 
    ... 

eform.py

class LoginForm(forms.Form): 
    email = forms.EmailField(required=True) 
    password = forms.CharField(widget=forms.PasswordInput) 

트레이스 백

ConnectionError at /login/ 
You have not defined a default connection 
Request Method: POST 
Request URL: http://127.0.0.1:8000/login/ 
Django Version: 1.6.5 
Exception Type: ConnectionError 
Exception Value:  
You have not defined a default connection 
Exception Location: /usr/local/lib/python2.7/dist-packages/mongoengine/connection.py in get_connection, line 93 
Python Executable: /usr/bin/python 
Python Version: 2.7.6 
Python Path:  
['/home/virus/nlocate/project/test-project/djangoMongoTestApp', 
'/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-x86_64-linux-gnu', 
'/usr/lib/python2.7/lib-tk', 
'/usr/lib/python2.7/lib-old', 
'/usr/lib/python2.7/lib-dynload', 
'/usr/local/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages/PILcompat', 
'/usr/lib/python2.7/dist-packages/gtk-2.0', 
'/usr/lib/pymodules/python2.7', 
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client'] 
/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py in get_response 
        response = wrapped_callback(request, *callback_args, **callback_kwargs) ... 
▶ Local vars 
/home/virus/nlocate/project/test-project/djangoMongoTestApp/admin/views.py in login 
       request.session['member_id'] = p["_id"] ... 
▶ Local vars 
/usr/local/lib/python2.7/dist-packages/django/contrib/sessions/backends/base.py in __setitem__ 
     self._session[key] = value ... 
▶ Local vars 
/usr/local/lib/python2.7/dist-packages/django/contrib/sessions/backends/base.py in _get_session 
       self._session_cache = self.load() ... 
▶ Local vars 
/usr/local/lib/python2.7/dist-packages/mongoengine/django/sessions.py in load 
     sess = super(SessionStore, self)._get_session(*args, **kwargs) 
     if sess.get('_auth_user_id', None): 
      sess['_auth_user_id'] = str(sess.get('_auth_user_id')) 
     return sess 
    def load(self): 
     try: 
      s = MongoSession.objects(session_key=self.session_key, ... 
            expire_date__gt=datetime_now)[0] 
      if MONGOENGINE_SESSION_DATA_ENCODE: 
       return self.decode(force_unicode(s.session_data)) 
      else: 
       return s.session_data 
     except (IndexError, SuspiciousOperation): 
▶ Local vars 
/usr/local/lib/python2.7/dist-packages/mongoengine/queryset/manager.py in __get__ 
     queryset = queryset_class(owner, owner._get_collection()) ... 
▶ Local vars 
/usr/local/lib/python2.7/dist-packages/mongoengine/document.py in _get_collection 
      db = cls._get_db() ... 
▶ Local vars 
/usr/local/lib/python2.7/dist-packages/mongoengine/document.py in _get_db 
     return get_db(cls._meta.get("db_alias", DEFAULT_CONNECTION_NAME)) ... 
▶ Local vars 
/usr/local/lib/python2.7/dist-packages/mongoengine/connection.py in get_db 
     conn = get_connection(alias) ... 
▶ Local vars 
/usr/local/lib/python2.7/dist-packages/mongoengine/connection.py in get_connection 
      raise ConnectionError(msg) ... 
▶ Local vars 

또한 예제 프로젝트 제안 사용자 정의 사용자 인증 및 django, mongodb 사용하여 승인을 제안하십시오

+0

[이 게시물에 답변을 보았습니까 (http://stackoverflow.com/questions/21818610/mongoengine-connectionerror-you-have-not-defined-a-default-connection)? – okoboko

+0

'request.session [ 'member_id'] = p [ "_ id"]'를 추가하면 연결 오류가 발생합니다. 뷰에서 db에 값을 삽입 할 수 있습니다. 그래서 위의 링크와 다른 점이 있기를 바랍니다. – Lionel

답변

0

설정 파일에 SESSION_ENGINE 변수를 설정 한 때문입니다. 그래서 세션을 요청하면 mongodb에 연결을 시도하고 연결 오류가 발생합니다.

SESSION_ENGINE = 'mongoengine.django.sessions' 

위의 블록 (기본 세션 엔진 사용)에 주석을 붙여 실행하면 연결 오류가 해결되었습니다. mongo 세션 엔진에 대한 기본 세션 엔진의 우세를 모르지만.