Есть ли способ изменить представление 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'))

Отказ от ответственности: я не собирался писать функциональный код, просто несколько советов, как решить вашу проблему, там

Другие вопросы по тегам