Как я могу использовать эти objectmixins в моих функциональных представлениях?
Я пытаюсь реализовать приложение для отслеживания активности пользователя в моем проекте. Я хочу отслеживать каждый клик пользователя. Может ли кто-нибудь помочь мне в реализации этого.
Хотя я пытался, я застрял здесь при получении объектов. Помогите мне внедрить эти объектные миксины в мои функциональные представления
Вот мой models.py:
# Create your models here.
from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.fields import GenericForeignKey
from django.conf import settings
from .signals import object_viewed_signal
User = settings.AUTH_USER_MODEL
class History(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
content_type = models.ForeignKey(ContentType, on_delete=models.SET_NULL, null=True)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey()
viewed_on = models.DateTimeField(auto_now_add=True)
def __str__(self):
return "%s viewed: %s" %(self.content_object, self.viewed_on)
class Meta:
verbose_name_plural = "Histories"
def object_viewed_receiver(sender, instance, request, *args, **kwargs):
new_history = History.objects.create(
user = request.user,
content_type = ContentType.objects.get_for_model(sender),
object_id = instance.id
)
object_viewed_signal.connect(object_viewed_receiver)
и это мой views.py
from django.shortcuts import render
# Create your views here.
from django.shortcuts import render, redirect
from django.views.generic import ListView, View
from django.views.generic.detail import SingleObjectMixin
from .models import History
from django.shortcuts import render
# Create your views here.
from django.shortcuts import render, redirect
from django.views.generic import ListView, View
from django.views.generic.detail import SingleObjectMixin
from .models import History
class HistoryList(ListView):
def get_queryset(self):
user_history = History.objects.filter(user=self.request.user)
return user_history
class HistoryDelete(SingleObjectMixin, View):
model = History
def get(self, request, *args, **kwargs):
obj = self.get_object()
if obj is not None:
obj.delete()
return redirect('history')
Вот мой файл signals.py
from django.dispatch import Signal
object_viewed_signal = Signal(providing_args=['instance', 'request'])
Вот мой mixins.py
from .signals import object_viewed_signal
class ObjectViewMixin:
def dispatch(self, request, *args, **kwargs):
try:
instance = self.get_object()
except:
instance = None
if request.user.is_authenticated and instance is not None:
object_viewed_signal.send(instance.__class__, instance=instance, request=request)
return super(ObjectViewMixin, self).dispatch(request, *args, **kwargs)
и я хочу использовать этот код с моими функциями.
@login_required
def UpdateProfile(request, slug):
user = Profile.objects.get(slug=slug)
if request.method == "POST":
form = UpdateProfileForm(request.POST, request.FILES, instance=user)
if form.is_valid():
profile_pic = form.cleaned_data['profile_pic']
form.profile_pic = profile_pic
form.save()
messages.success(request,"Data Updated successfully")
return HttpResponseRedirect(reverse('updateaddress', args=(request.user.profile.slug,)))
else:
messages.error(request, "Please check all fields are valid")
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
else:
form = UpdateProfileForm(instance=user)
context = {
'user':user,
'form':form,
}
return render(request, "authentication/register/update/profile.html",context)
Любое предложение будет оценено по достоинству...