#django #django-rest-framework
#джанго #django-rest-фреймворк #django #django-rest-framework
Вопрос:
если я использую класс ModelSerializer из django-rest-framework, как я могу убедиться, что пароли хэшируются? поскольку вызов ModelSerializer.save() не хэширует поля, называемые «паролем»? есть ли способ указать, что поле должно быть хэшировано в «Meta:»?
Ответ №1:
Чтобы выполнить такое преобразование, вы можете сделать две вещи:
- используется
validate_xxx
для изменения значения поля при проверке (см. Документы) - создайте определение пользовательского поля, если вы используете такое поведение чаще.
Если вы говорите о пользовательской модели Django, вы могли бы определить pre_save
метод в сериализаторе, который вызывает User.set_password
.
Комментарии:
1. Я думаю, что это более чистое решение
Ответ №2:
В итоге я изменил несериализованный объект запроса и хэшировал пароль перед его сериализацией django упрощает это с помощью make_password
def prehash(self, request):
password = request.DATA['password']
password = make_password(password)
request = request.DATA
request = request.copy()
request.update({'password':password})
return request