Django usuarios en línea con marco de descanso

Había usado django-online-users para obtener usuarios en línea y funcionó bien. Pero el problema es que no soy capaz de conseguir usuarios en línea en el marco de reposo django es decir, los usuarios que hacen llamadas api desde la react al servidor backend.

Sólo me estoy registrando directamente en los usuarios iniciar sesión en el panel de administración.

Por favor, sugiera una manera de utilizarlo con el marco de reposo django.

Gracias.

Pregunta hecha hace 3 años, 5 meses, 0 días - Por apiartisan


2 Respuestas:

  • Para poder rastrear los usuarios en línea en un API de Django Rest Framework, puedes crear tu propio sistema de seguimiento de usuarios en línea utilizando la funcionalidad integrada de Django y DRF.

    Aquí te dejo un ejemplo de cómo podrías hacerlo:

    • Crear un modelo en tu aplicación de base de datos para mantener la información de los usuarios en línea:
    python
    from django.db import models
    from django.contrib.auth.models import User
    
    class UserOnline(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        last_activity = models.DateTimeField(auto_now=True)
    
    • Crear una señal para manejar las solicitudes API y actualizar el estado del usuario en línea:
    python
    from django.dispatch import receiver
    from django.contrib.auth.signals import user_logged_in, user_logged_out
    from rest_framework.authtoken.models import Token
    
    @receiver(user_logged_in)
    def user_logged_in_handler(sender, user, request, *kwargs):
        user_online, created = UserOnline.objects.get_or_create(user=user)
    
    @receiver(user_logged_out)
    def user_logged_out_handler(sender, user, request, *kwargs):
        UserOnline.objects.filter(user=user).delete()
    
    • Crear una vista en tu API para obtener la lista de usuarios en línea:
    python
    from rest_framework.views import APIView
    from rest_framework.response import Response
    from .models import UserOnline
    from django.contrib.auth.models import User
    
    class UserOnlineList(APIView):
        def get(self, request):
            users_online = User.objects.filter(useronline__last_activity__gte=timezone.now() - timedelta(seconds=settings.USER_ONLINE_TIMEOUT))
            user_names = [user.username for user in users_online]
            return Response({'users_online': user_names})
    

    Recuerda ajustar los tiempos de actividad de los usuarios en línea y el manejo de las señales según tus necesidades específicas. Además, asegúrate de que tu aplicación esté correctamente configurada para manejar las señales de inicio y cierre de sesión de los usuarios.

    Espero que esta guía te ayude a implementar el seguimiento de usuarios en línea en tu API de Django Rest Framework. ¡Buena suerte!

    Respondida el Dec 18, 2020 a las 06:10 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Integración de django-online-users con Django REST Framework

    Para integrar django-online-users con Django REST Framework, puedes seguir estos pasos:

    • Instala `django-online-users`:
    
    pip install django-online-users
    
    • Agrega `django_online_users` a `INSTALLED_APPS`:
    python
    INSTALLED_APPS = [
        

    ...

    'django_online_users',

    ...

    ]
    • Middleware:

    Agrega el middleware OnlineUsersMiddleware a tu configuración de middleware:

    python
    MIDDLEWARE = [
        

    ...

    'django_online_users.middleware.OnlineUsersMiddleware',

    ...

    ]
    • Vistas:

    En tus vistas que manejan llamadas de API, incluye el decorador @online_users.auto_last_seen para registrar automáticamente el usuario como en línea:

    python
    from django_online_users import auto_last_seen
    
    @auto_last_seen
    def my_api_view(request):
        

    ...

    • Obtención de usuarios en línea:

    Puedes utilizar la función get_users_online para obtener una lista de usuarios en línea:

    python
    from django_online_users import get_users_online
    
    users_online = get_users_online()
    

    Ejemplo de implementación:

    
    

    urls.py

    from django.urls import path from . import views urlpatterns = [ path('my_api_view/', views.my_api_view), ]

    views.py

    from django_online_users import auto_last_seen from rest_framework.views import APIView class MyAPIView(APIView): @auto_last_seen def get(self, request):

    ...

    Consideraciones adicionales:

    Asegúrate de que el modelo de usuario utilizado por tu proyecto de Django esté actualizado con el campo last_seen añadido por django-online-users. Por defecto, django-online-users considera que un usuario está en línea si ha realizado una solicitud en los últimos 5 minutos. Puedes ajustar este valor modificando la configuración ONLINE_USERS_TIMEOUT en tu archivo de configuración de Django. * Ten en cuenta que esta solución no funcionará para usuarios que realizan solicitudes de API a través de aplicaciones móviles u otras plataformas no basadas en navegador.

    Respondida el Dec 18, 2020 a las 06:17 - por Gemini

    Votos positivos: 0 | Votos negativos: 0