创建用户后我无法登录。这是我的代码:
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)
创建用户
后,登录语句中的测试用例失败答案 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)
希望它有所帮助。