django - 创建用户

时间:2017-06-08 16:06:16

标签: django django-rest-framework

创建用户后我无法登录。这是我的代码:

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'

    def create(self, validated_data):
        username = validated_data.pop('username')
        password = validated_data.pop('password')
        return User.objects.create_user(username, password, **validated_data)

我的api:

from django.contrib.auth.models import User
class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

任何帮助表示赞赏。 更新:这是我的测试用例

class UserAPITestCase(APITestCase):

def setUp(self):
    self.client = APIClient()

    self.user = User.objects.create_user(
        username='anhnguyen',
        password=PASSWORD,
    )
    self.user.save()

def test_create_user(self):
    data = {
        'username': 'khoavo',
        'password': PASSWORD,
    }

    user = self.client.post(URL, data, format='json')
    self.assertEqual(user.status_code, status.HTTP_201_CREATED)

    url = reverse(URL1, args=[2])
    response = self.client.get(url)
    self.assertEqual(response.status_code, status.HTTP_200_OK)

    login = self.client.login(username='khoavo', password=PASSWORD)
    self.assertTrue(login)

创建用户

后,登录语句中的测试用例失败

3 个答案:

答案 0 :(得分:1)

create_user方法将email作为其第二个参数。您可以通过将password更改为关键字参数来解决问题:

return User.objects.create_user(username, password=password, **validated_data)

答案 1 :(得分:1)

最简单的方法是使用**发送所有内容:

...
def create(self, validated_data):
    return User.objects.create_user(**validated_data)
...

它可以解决您的问题

答案 2 :(得分:0)

self.client.login()用于测试使用会话身份验证的API。确保您使用的是会话身份验证。

如果您使用的是基于令牌的身份验证,则应该这样做:

client = APIClient()
client.credentials(HTTP_AUTHORIZATION='Token ' + token)

希望它有所帮助。