int() 的文字无效,以 10 为基数:"莫尼奇卡"发生在我尝试在 REST API 中注册新用户时



我使用Django REST API创建了注册API视图,当我尝试使用endpoint时,在POST之后,我可能会看到错误:基为10的int((的无效文本:"Moniczka"。我已经检查了RegisterSerializer、RegisterAPI视图和url,没有发现任何错误。也许你们中的一些人可以帮助我。

这是我的序列化程序类:

class RegisterSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'email', 'password')
extra_kwargs = {'password': {'write_only': True}}
def create(self, validated_data):
user = User(validated_data['username'], validated_data['email'],
validated_data['password'])
return user

这是我的看法。py:

# Register API
class RegisterAPI(generics.GenericAPIView):
serializer_class = RegisterSerializer
def post(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.save()
return Response({
"user":
UserSerializer(user, context=self.get_serializer_context()).data,
"token":
AuthToken.objects.create(user)[1]
})

最后是urls.py:

urlpatterns = [
path('register/', RegisterAPI.as_view(), name='register'),
]

和从django调试的回溯:

Environment:

Request Method: POST
Request URL: http://127.0.0.1:8000/api/register/
Django Version: 3.1.2
Python Version: 3.8.4
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'knox',
'savings']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']

Traceback (most recent call last):
File "D:workspaceMoneyvenvlibsite-packagesdjangocorehandlersexception.py", line 47, in inner
response = get_response(request)
File "D:workspaceMoneyvenvlibsite-packagesdjangocorehandlersbase.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:workspaceMoneyvenvlibsite-packagesdjangoviewsdecoratorscsrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "D:workspaceMoneyvenvlibsite-packagesdjangoviewsgenericbase.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "D:workspaceMoneyvenvlibsite-packagesrest_frameworkviews.py", line 509, in dispatch
response = self.handle_exception(exc)
File "D:workspaceMoneyvenvlibsite-packagesrest_frameworkviews.py", line 469, in handle_exception
self.raise_uncaught_exception(exc)
File "D:workspaceMoneyvenvlibsite-packagesrest_frameworkviews.py", line 480, in raise_uncaught_exception
raise exc
File "D:workspaceMoneyvenvlibsite-packagesrest_frameworkviews.py", line 506, in dispatch
response = handler(request, *args, **kwargs)
File "D:workspaceMoneysavingsviews.py", line 79, in post
UserSerializer(user, context=self.get_serializer_context()).data,
File "D:workspaceMoneyvenvlibsite-packagesrest_frameworkserializers.py", line 548, in data
ret = super().data
File "D:workspaceMoneyvenvlibsite-packagesrest_frameworkserializers.py", line 246, in data
self._data = self.to_representation(self.instance)
File "D:workspaceMoneyvenvlibsite-packagesrest_frameworkserializers.py", line 515, in to_representation
ret[field.field_name] = field.to_representation(attribute)
File "D:workspaceMoneyvenvlibsite-packagesrest_frameworkfields.py", line 963, in to_representation
return int(value)
Exception Type: ValueError at /api/register/
Exception Value: invalid literal for int() with base 10: 'Moniczka'

我希望你们中的一个人能帮助我:(

尝试

user = User(username=validated_data['username'], email=validated_data['email'],
password=validated_data['password'])

此外,如果用户如果是常规Django用户模型(Django.contrib.auth.models.User(,则应该使用set_password函数来设置密码-将其作为参数传递是不起作用的。

user = User(username=validated_data['username'], email=validated_data['email'])
user.set_password(validated_data['password']))

最新更新