인프런 커뮤니티 질문&답변

rosy님의 프로필 이미지
rosy

작성한 질문수

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

admin 오류

작성

·

514

0

선생님,안녕하세요 다음과 같은 오류가 발생했는데 어떻게 해결해야할까요?

 

Environment:

 

 

Request Method: GET

Request URL: http://127.0.0.1:8000/admin/

 

Django Version: 3.0.14

Python Version: 3.9.7

Installed Applications:

['django.contrib.admin',

 'django.contrib.auth',

 'django.contrib.contenttypes',

 'django.contrib.sessions',

 'django.contrib.messages',

 'django.contrib.staticfiles',

 'blog1']

Installed Middleware:

['django.middleware.security.SecurityMiddleware',

 'django.contrib.sessions.middleware.SessionMiddleware',

 'django.middleware.common.CommonMiddleware',

 'django.middleware.csrf.CsrfViewMiddleware',

 'django.contrib.auth.middleware.AuthenticationMiddleware',

 'django.contrib.messages.middleware.MessageMiddleware',

 'django.middleware.clickjacking.XFrameOptionsMiddleware']

 

 

 

Traceback (most recent call last):

  File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\sessions\backends\base.py", line 199, in _get_session

    return self._session_cache

 

During handling of the above exception ('SessionStore' object has no attribute '_session_cache'), another exception occurred:

  File "C:\ProgramData\Anaconda3\lib\site-packages\django\core\handlers\exception.py", line 34, in inner

    response = get_response(request)

  File "C:\ProgramData\Anaconda3\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response

    response = self.process_exception_by_middleware(e, request)

  File "C:\ProgramData\Anaconda3\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response

    response = wrapped_callback(request, *callback_args, **callback_kwargs)

  File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\admin\sites.py", line 249, in wrapper

    return self.admin_view(view, cacheable)(*args, **kwargs)

  File "C:\ProgramData\Anaconda3\lib\site-packages\django\utils\decorators.py", line 130, in _wrapped_view

    response = view_func(request, *args, **kwargs)

  File "C:\ProgramData\Anaconda3\lib\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func

    response = view_func(request, *args, **kwargs)

  File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\admin\sites.py", line 220, in inner

    if not self.has_permission(request):

  File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\admin\sites.py", line 194, in has_permission

    return request.user.is_active and request.user.is_staff

  File "C:\ProgramData\Anaconda3\lib\site-packages\django\utils\functional.py", line 224, in inner

    self._setup()

  File "C:\ProgramData\Anaconda3\lib\site-packages\django\utils\functional.py", line 360, in _setup

    self._wrapped = self._setupfunc()

  File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\auth\middleware.py", line 24, in <lambda>

    request.user = SimpleLazyObject(lambda: get_user(request))

  File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\auth\middleware.py", line 12, in get_user

    request._cached_user = auth.get_user(request)

  File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\auth\__init__.py", line 173, in get_user

    user_id = _get_user_session_key(request)

  File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\auth\__init__.py", line 58, in _get_user_session_key

    return get_user_model()._meta.pk.to_python(request.session[SESSION_KEY])

  File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\sessions\backends\base.py", line 64, in __getitem__

    return self._session[key]

  File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\sessions\backends\base.py", line 204, in _get_session

    self._session_cache = self.load()

  File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\sessions\backends\db.py", line 44, in load

    return self.decode(s.session_data) if s else {}

  File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\sessions\backends\base.py", line 110, in decode

    encoded_data = base64.b64decode(session_data.encode('ascii'))

  File "C:\ProgramData\Anaconda3\lib\base64.py", line 87, in b64decode

    return binascii.a2b_base64(s)

 

Exception Type: Error at /admin/

Exception Value: Incorrect padding

답변 2

0

이진석님의 프로필 이미지
이진석
지식공유자

장고 3.1 부터 세션 데이터 저장 시에 암호화가 되어 저장이 됩니다. 3.0 까지는 base64 인코딩 정도만 해서 저장했었거든요.

그래서 장고 프로젝트를 3.1 이상에서 생성하고 세션까지 생성하신 후에, 장고 프로젝트 구동을 장고 3.0 이하에서 구동하시면, 세션 데이터 decode 시에 Incorrect padding 오류가 발생합니다.

낮은 버전에서 높은 버전으로 올리면 호환이 되는 데, 의도치않게 높은 버전에서 동작하던 데이터가 낮은 버전으로 서버가 구동이 되면 문제가 되는 거죠.

아마도 장고 초기 설치 시에 장고 최신 버전도 쓰셨다가, 강의에서 안내하는 3.0.x 버전도 설치하시면서 꼬이신 상황이 아닐까 싶습니다.

해당 오류가 발생하실 경우, 다음 3가지 장고 버전이 모두 일치하는 지 확인해보세요.

  • settings.py 상단의 주석에 적힌, 프로젝트 생성 시의 장고 버전
  • django-admin --version 에서의 장고 버전
  • python manage.py --version 에서의 장고 버전

이에 대한 대응으로

  1. 먼저 장고 버전부터 잘 확인해주시구요.
  2. 이후에 세션 데이터를 지우시면, 세션이 현재 장고 버전에 맞게 새롭게 생성이 됩니다.
  3. 그런데 세션 데이터 지우시는 것이 조금 어려우실 수 있으니, 지금은. runserver를 정지해주시고 (Ctrl-C 입력), 데이터베이스 파일(db.sqlite3 )을 삭제하시고, 다시 migrate/createsuperuser 등을 해주시고, runserver를 하여 재확인을 해보세요

그리고, 질문 제목에는 본 질문을 요약해서 써주시면, 다른 분들에게도 본 질문이 도움이 될 수 있습니다. 부탁드리겠습니다. 본 질문의 핵심 키워드는 Incorrect padding 오류이니 이를 제목에 기입해주시면 좋습니다. 오류 메세지 끝에서 확인하실 수 있습니다.

화이팅입니다. :-)

0

이진석님의 프로필 이미지
이진석
지식공유자

안녕하세요.

혹시 settings.py 소스코드 상단의 주석에 보시면, 본 프로젝트를 생성한 장고 버전이 적혀있습니다. 혹시 버전이 얼마로 쓰여있으신가요?

그리고 django-admin --version 의 출력값과 python manage.py --version 의 출력값이 어떻게 되나요?

rosy님의 프로필 이미지
rosy

작성한 질문수

질문하기