我在我的第一个 django、rest-framework 应用程序中遇到了很多问题。
- 我注册后没有得到令牌,而不是
“用户”:{ "_id":"1", "用户名":"你", “电子邮件”:“a@a.com” }, “令牌”:'fjdjfkljgkghgjkl' }
我越来越
{
"_id":"1",
"username":"you",
"email":"a@a.com"
}
这里可能是什么问题?
- 当我尝试登录时,邮递员告诉我:
{"username" :["user with this username already exist.]}
我试图登录不注册。为什么会这样?
- 当我尝试获取属于该用户的所有待办事项时,我收到此错误:
{"details":"Authentication credantials were not provided" }
,而不是一个空列表,这是为什么呢?
- 如果我只有令牌,如何获取用户?
序列化代码:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('_id', 'username', 'email', 'password')
extra_kwarg = { 'password' : {
'write_only' : True
}}
class SignUpSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('_id', 'username', 'email', 'password')
extra_kwarg = { 'password' : {
'write_only' : True
}}
def create_user(self, validated_data):
user = User.objects.create_user(validated_data['username'], validated_data['email'], validated_data['password'])
return user
class SignInSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', 'password')
def validate(self, data):
username = data.get("username", None)
password = data.get("password", None)
user = authenticate(username=username, password=password)
if user is None:
raise serializers.ValidationError('A user with this username and password is not found.')
return user
视图集代码:
class SignUpViewSet(viewsets.ModelViewSet):
serializer_class = SignUpSerializer
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': SignUpSerializer(user, context = self.get_serializer_context()).data,
'token': AuthToken.objects.create(user)
})
class SignInViewSet(viewsets.ModelViewSet):
serializer_class = SignInSerializer
def post(self, request, *args, **kwargs):
serializer = self.get_serializer(data = request.data)
serializer.is_valid(raise_exception = True)
user = serializer.validated_data
return Response({
'user': UserSerializer(user, context = self.get_serializer_context()).data,
'token': AuthToken.objects.create(user)
})
class GetUserViewSet(viewsets.ModelViewSet):
permission_classes = [
permissions.IsAuthenticated
]
serializer_class = UserSerializer
def get_object(self):
return self.request.user