Есть ли способ изменить представление Django-rest-auth реестра?
Я создал остальные API, используя Django-rest-auth, при регистрации он возвращается
{
"detail": "Verification e-mail sent."
}
, Но мне нужно добавить какой-то статус, например, успех и сообщение, например, отправленное письмо и т. Д. Есть ли способ переопределить представление django-rest-auth для регистрации?
class MyRegisterSerializer(RegisterSerializer):
first_name = serializers.CharField()
last_name = serializers.CharField()
def get_cleaned_data(self):
super(MyRegisterSerializer, self).get_cleaned_data()
return {
'username': self.validated_data.get('username', ''),
'password1': self.validated_data.get('password1', ''),
'email': self.validated_data.get('email', ''),
'first_name': self.validated_data.get('first_name', ''),
'last_name': self.validated_data.get('last_name', '')
}
def save(self, request):
adapter = get_adapter()
user = adapter.new_user(request)
self.cleaned_data = self.get_cleaned_data()
adapter.save_user(request, user, self)
setup_user_email(request, user, [])
user.address = self.cleaned_data.get('address')
user.user_type = self.cleaned_data.get('user_type')
user.save()
return user
2 ответа
Мы могли бы сделать это путем переопределения соответствующего представления, как мы делали здесь. Есть ли способ изменить представление входа в Django-rest-auth?,
Разница в том, что основная функция. Здесь нам нужно переопределить create()
метод как,
from rest_auth.registration.views import RegisterView
class CustomRegisterView(RegisterView):
def create(self, request, *args, **kwargs):
response = super().create(request, *args, **kwargs)
custom_data = {"message": "some message", "status": "ok"}
response.data.update(custom_data)
return response
И в urls.py
urlpatterns = [
url(r'custom/registration/', CustomRegisterView.as_view(), name='my_custom_registration')
]
Ответ жестко закодирован и не настраивается, как вы можете видеть в функции get_response_data
в коде:
https://github.com/Tivix/django-rest-auth/blob/master/rest_auth/registration/views.py
Лучше всего создать собственный класс, который расширяет ExtendedRegisterView
класс и переопределения get_response_data
и / или create
andmethods.
например
class ExtendedRegisterView(MyRegisterSerializer):
def get_response_data(self, user):
if allauth_settings.EMAIL_VERIFICATION == \
allauth_settings.EmailVerificationMethod.MANDATORY:
# return custom answer
else:
return super(ExtendedRegisterView, self).get_response_data(user)
Затем вы также должны указать URL-адрес вашего нового класса (до включения других конечных точек API регистрации).
например
url(r'^rest-auth/registration/$', ExtendedRegisterView.as_view(), name='rest_register'),)
url(r'^rest-auth/registration/', include('rest_auth.registration.urls'))
Отказ от ответственности: я не собирался писать функциональный код, просто несколько советов, как решить вашу проблему, там