django rest 프레임 워크를 사용하여 사용자를 등록하려고하는데이 오류가 발생합니다. 문제 확인을 도와주세요.
/ api / register / 'module'개체의 TypeError는 호출 할 수 없습니다. 요청 방법 : POST 요청 URL : http://127.0.0.1:8000/api/register/ Django 버전 : 3.1.5 예외 유형 : TypeError 예외 값 :
'module 'object is not callable 예외 위치 : C : \ Users \ ben \ PycharmProjects \ buddyroo \ lib \ site-packages \ rest_framework \ generics.py, line 110, in get_serializer Python 실행 파일 : C : \ Users \ ben \ PycharmProjects \ buddyroo \ Scripts \ python.exe Python 버전 : 3.8.5
아래는 RegisterSerializer입니다.
from django.contrib.auth.password_validation import validate_password
from rest_framework import serializers
from django.contrib.auth.models import User
from rest_framework.validators import UniqueValidator
class RegisterSerializer(serializers.ModelSerializer):
email = serializers.EmailField(
required=True,
validators=[UniqueValidator(queryset=User.objects.all())]
)
password = serializers.CharField(write_only=True, required=True, validators=[validate_password])
password2 = serializers.CharField(write_only=True, required=True)
class Meta:
model = User
fields = ('username', 'password', 'password2', 'email', 'first_name', 'last_name')
extra_kwargs = {
'first_name': {'required': True},
'last_name': {'required': True}
}
def validate(self, attrs):
if attrs['password'] != attrs['password2']:
raise serializers.ValidationError({"password": "Password fields didn't match."})
return attrs
def create(self, validated_data):
user = User.objects.create(
username=validated_data['username'],
email=validated_data['email'],
first_name=validated_data['first_name'],
last_name=validated_data['last_name']
)
user.set_password(validated_data['password'])
user.save()
return user
및 RegisterView.py
from django.contrib.auth.models import User
from rest_framework import generics
from rest_framework.permissions import IsAuthenticated, AllowAny # <-- Here
from rest_framework.response import Response
from rest_framework.views import APIView
from api import UsersSerializer, RegisterSerializer
class RegisterView(generics.CreateAPIView):
queryset = User.objects.all()
serializer_class = RegisterSerializer
permission_classes = (AllowAny,)
RegisterSerializer가 정의 된 모듈 (파일)의 이름이 RegisterSerializer.py라고 가정합니다.
이 경우 RegisterView.py에서 클래스가 아닌 RegisterSerializer 모듈을 가져옵니다.
그래서, 그것은
from api.RegisterSerializer import RegisterSerializer
파이썬에서는 하나의 모듈에 둘 이상의 클래스가있는 것이 일반적이므로 모듈의 이름을 serializers.py 및 views.py로 바꾸고 모든 serializer와 뷰를 거기에 배치하는 것이 좋습니다.
물론 많은 경우이를 분할하고 serializer / views 패키지를 만들고 여러 serializer / views 모듈을 거기에 둘 수 있습니다 : user_serializers.py, whaterver_serializers.py ...
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다