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 FrameworkPara 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 pordjango-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ónONLINE_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