Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否有任何方法可以更改注册表Django rest auth的视图?_Python_Django_Api_Django Rest Framework_Django Rest Auth - Fatal编程技术网

Python 是否有任何方法可以更改注册表Django rest auth的视图?

Python 是否有任何方法可以更改注册表Django rest auth的视图?,python,django,api,django-rest-framework,django-rest-auth,Python,Django,Api,Django Rest Framework,Django Rest Auth,我已经使用Django rest auth创建了rest API,在注册中,它返回了 { "detail": "Verification e-mail sent." } ,但我需要添加一些状态,如成功和邮件发送等。是否有任何方法覆盖django rest auth的视图以进行注册 class MyRegisterSerializer(RegisterSerializer): first_name = serializers.CharField() last_name = seriali

我已经使用Django rest auth创建了rest API,在注册中,它返回了

{
"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 

我们可以通过像这里一样覆盖相应的视图来实现这一点。
不同之处在于,覆盖函数。这里我们需要将
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

响应是硬编码的,不可配置,如代码中的函数
get\u response\u data
所示:

最好是创建一个自定义类,该类扩展了
ExtendedRegisterView
类并覆盖
get\u response\u data
和/或
create
和方法

e、 g

然后还必须将url指向新类(在包含其他register api端点之前)

e、 g


免责声明:我不打算编写功能代码,只是一些如何解决问题的指导,很高兴知道:)无论如何,如果是这样,接受两个答案,这就是StackOverflow策略;)@卡希亚普:哎呀。对不起,我forgot@JPG我遇到了类似的问题,您的解决方案确实有效,我能够更新响应。但是在我的例子中,我想在身份验证失败时显示一个自定义响应消息,比如:response={'result':0,'message':'Bad Request'},当它通过它时,应该给出一个带有键值和用户主键的结果1。我怎样才能做到这一点。您可以查看我的问题链接-您所说的认证失败是什么意思??
urlpatterns = [
                  url(r'custom/registration/', CustomRegisterView.as_view(), name='my_custom_registration')

              ] 
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(r'^rest-auth/registration/$', ExtendedRegisterView.as_view(), name='rest_register'),)
url(r'^rest-auth/registration/', include('rest_auth.registration.urls'))