我正在尝试使用 dj-rest-auth 库实现身份验证,到目前为止一切正常,但是当我尝试更新用户时,它说存在同名用户。
user/ 是我的 url,它给我一个 PUT 和 PATCH 方法的视图。但是机器人不工作,如果我更改我的用户名,它会更新。
网址.py
urlpatterns = [
# path('', views.login, name="login"),
path('login/', LoginView.as_view()),
path('logout/', LogoutView.as_view()),
path('register/', RegisterView.as_view()),
path('verify-email/', VerifyEmailView.as_view(), name='rest_verify_email'),
path('account-confirm-email/', VerifyEmailView.as_view(), name='account_email_verification_sent'),
path('account-confirm-email/<str:key>/', ConfirmEmailView.as_view()),
re_path(r'^account-confirm-email/(?P<key>[-:\w]+)/$',
VerifyEmailView.as_view(), name='account_confirm_email'),
path('user/', UserDetailsView.as_view()),
path('google/connect/', GoogleLogin.as_view(), name='google_connect')
]
模型.py
USER_TYPE_CHOICE = (
('admin', 'admin'),
('student', 'student'),
('instructor', 'instructor'),
)
class CustomUser(AbstractUser):
phone = models.CharField(max_length=12)
user_type = models.CharField(max_length=20, choices=USER_TYPE_CHOICE, default='student')
# class UserProfile(models.Model):
# user = models.OneToOneField(CustomUser, related_name='userprofile', on_delete=models.CASCADE)
# # custom fields for user
# full_name = models.CharField(max_length=100)
# profile_pic = models.ImageField()
序列化程序.py
from dj_rest_auth.serializers import UserDetailsSerializer, PasswordResetSerializer
from rest_framework import serializers
from django.conf import settings
from allauth.account.adapter import get_adapter
from allauth.account.utils import setup_user_email
from dj_rest_auth.registration.serializers import RegisterSerializer
from .models import *
from allauth.account.forms import ResetPasswordForm, ResetPasswordKeyForm
class CustomRegisterSerializer(RegisterSerializer):
phone = serializers.CharField(required=True, max_length=100)
def get_cleaned_data(self):
data_dict = super().get_cleaned_data()
data_dict['phone'] = self.validated_data.get('phone', '')
data_dict['user_type'] = self.validated_data.get('user_type', '')
return data_dict
class CustomUserDetailsSerializer(UserDetailsSerializer):
class Meta(UserDetailsSerializer.Meta):
fields = UserDetailsSerializer.Meta.fields + \
('phone', 'user_type', )
class CustomPasswordResetSerializer(PasswordResetSerializer):
password_reset_form_class = ResetPasswordForm