@FDF câu trả lời là tuyệt vời. Đây là một cách khác để làm điều đó.
Chúng tôi gửi user_logged_in
tín hiệu rằng sẽ gọi update_last_login
:
user_logged_in.send(sender=user.__class__, request=request, user=user)
Dưới đây là một cái nhìn làm việc (dựa trên một mô hình tài khoản tùy chỉnh mà sử dụng email như USERNAME_FIELD):
from rest_framework import parsers, renderers
from rest_framework.authtoken.models import Token
from rest_framework.response import Response
from rest_framework.views import APIView
from django.contrib.auth.signals import user_logged_in
from emailauth.serializers import AuthTokenSerializer, UserSerializer
class ObtainAuthToken(APIView):
throttle_classes =()
permission_classes =()
parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,)
renderer_classes = (renderers.JSONRenderer,)
serializer_class = AuthTokenSerializer
def post(self, request, *args, **kwargs):
serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.validated_data['user']
token, created = Token.objects.get_or_create(user=user)
user_logged_in.send(sender=user.__class__, request=request, user=user)
return Response({'token': token.key, 'user': UserSerializer(user).data})
obtain_auth_token = ObtainAuthToken.as_view()
Bạn có thể tìm mã nguồn đầy đủ tại đây: Api View with last_login updated
Hy vọng điều này h elps.
Tôi đang gặp vấn đề tương tự với phần còn lại. Lần đăng nhập cuối cùng dường như bị bỏ qua khi giao dịch với mã thông báo – timop
Cuối cùng, tôi đã tự giải quyết vấn đề này khi cập nhật trường đó. Tôi đã kiểm tra mã nguồn và nó không được cập nhật khi đăng nhập. –
Xin chào, @ F.D.FDev bạn có thể chia sẻ giải pháp của mình cho vấn đề này không? – neptune