TypeError в /login Строки должны быть закодированы перед хэшированием
я сталкиваюсь с ошибкой в этом проекте django .... я попробовал все советы, которые я могу найти, но он все равно не работает должным образом...... ниже приведена ошибка из веб
Окружающая среда:
Метод запроса: POST URL запроса: http://127.0.0.1:8000/login
Django Версия: 2.2 Версия Python: 3.9.7
Installed Applications:
['main',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_filters']
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:
File "C:\Users\INTROVERTED\Downloads\Compressed\FacialRecognitionForPolice-master\venv1\lib\site-packages\django\core\handlers\exception.py" in inner
34. response = get_response(request)
File "C:\Users\INTROVERTED\Downloads\Compressed\FacialRecognitionForPolice-master\venv1\lib\site-packages\django\core\handlers\base.py" in _get_response 115. response = self.process_exception_by_middleware(e, request)
File "C:\Users\INTROVERTED\Downloads\Compressed\FacialRecognitionForPolice-master\venv1\lib\site-packages\django\core\handlers\base.py" in _get_response
113.response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\INTROVERTED\Downloads\Compressed\FacialRecognitionForPolice-master\FacialRecognitionForPolice-master\main\views.py" in login
171.hashed = bcrypt.hashpw(request.POST['login_password'], bcrypt.gensalt())
File "C:\Users\INTROVERTED\Downloads\Compressed\FacialRecognitionForPolice-master\venv1\lib\site-packages\bcrypt_init_.py" in hashpw
79.raise TypeError("Strings must be encoded before hashing")
Тип исключения: TypeError at /login Значение исключения: Строки должны быть закодированы перед хэшированием
Как ясно сказано в сообщении об ошибке, сначала необходимо закодировать пароль.
В main/views.py в строке 171 у вас есть
hashed = bcrypt.hashpw(request.POST['login_password'], bcrypt.gensalt())
Ваши данные request.POST являются строкой, поэтому вы должны закодировать их в байты:
hashed = bcrypt.hashpw(request.POST['login_password'].encode(), bcrypt.gensalt())
Вы можете выбрать другую кодировку (не по умолчанию utf8) с помощью .encode('ascii') (выберите одну и не меняйте ее позже, utf8, вероятно, лучший выбор в целом).