Python 是否有任何方法可以更改注册表Django rest auth的视图?
我已经使用Django rest auth创建了rest API,在注册中,它返回了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
{
"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'))