Django rest framework django rest中的API不会更新上次登录
我创建了一个简单的端点来创建和更新用户。除了用户通过API登录时不会更新的last_login字段外,它工作正常 我的例子是: 我的网址:Django rest framework django rest中的API不会更新上次登录,django-rest-framework,Django Rest Framework,我创建了一个简单的端点来创建和更新用户。除了用户通过API登录时不会更新的last_login字段外,它工作正常 我的例子是: 我的网址: router.register(r"user", foo.UserViewSet) 我的序列化程序: class UserSerializer(serializers.ModelSerializer): password=serializers.CharField(write_only=True) def创建(自我验证的_数据): user=user.ob
router.register(r"user", foo.UserViewSet)
我的序列化程序:
class UserSerializer(serializers.ModelSerializer):
password=serializers.CharField(write_only=True)
def创建(自我验证的_数据):
user=user.objects.create(
用户名=已验证的_数据['username'],
first_name=已验证的_数据['first_name'],
last_name=已验证的_数据['last_name'],
电子邮件=已验证的_数据[“电子邮件”],
last_login=已验证的_数据[“last_login”],
)
user.set_密码(已验证的_数据['password'])
user.save()
返回用户
类元:
模型=用户
排除=(
“团体”,
“用户权限”,
)
我的看法是:
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
pagination_class = StandardPagination
serializer_class = UserSerializer
model = User
def update(self, request, *args, **kwargs):
user = self.get_object()
serializer = self.get_serializer(
user, data=request.data, partial=True
)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
return Response(serializer.data)
当我与任何用户(在API中)登录时,last_login字段始终为空。由django管理是好的
更新
我在将代码放入UserViewSet时遇到了一些进展和问题:
def执行身份验证(自我、请求):
user=request.user
user.last_login=timezone.now()
user.save()
返回用户
嗯。last_login正在注册,但仅在用户端点和该端点中的每个请求中注册。根据我自己对该问题的调查,last_login字段与默认的Django身份验证系统(会话身份验证)紧密耦合,这就是为什么在使用Django Admin时会更新此字段的原因,因为管理员使用会话身份验证 在您的情况下,似乎使用了其他类型的身份验证,并且不会触发更新此字段的信号。请参阅下面处理信号的链接: 因此,为了正确地更新此字段,您可能应该手动执行此操作。 下面是关于这个问题的另一个讨论:
你到底想用
User.objects.update(last\u login=request.data[“last\u login”])做什么?
?另外,您是否检查了更新请求中是否发送了上次登录的值?@sliderIt只是一个尝试。我刚刚编辑了我的问题。