Есть ли способ изменить представление Django-rest-auth реестра? - PullRequest
0 голосов
/ 31 августа 2018

Я создал остальные 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 ]

0 голосов
/ 31 августа 2018

Ответ жестко закодирован и не настраивается, как вы можете видеть в функции get_response_data в коде:

https://github.com/Tivix/django-rest-auth/blob/master/rest_auth/registration/views.py

Лучше всего создать собственный класс, который расширяет класс ExtendedRegisterView и переопределяет get_response_data и / или create и методы.

1012 *, например *

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'))

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

0 голосов
/ 31 августа 2018

Мы могли бы сделать это путем переопределения соответствующего представления, как мы делали здесь, Есть ли способ изменить представление входа в Django-rest-auth? .
Разница в том, что функция переопределения. Здесь нам нужно переопределить метод create() как

<b>from rest_auth.registration.views import RegisterView</b>


class CustomRegisterView(RegisterView):
    <b>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</b>

и urls.py

urlpatterns = [
                  <b>url(r'custom/registration/', CustomRegisterView.as_view(), name='my_custom_registration')</b>

              ] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...