Django - считается ли нормальным хранить функцию во views.py среди View классов?

Всем привет, хочу узнать мнение людей с опытом: есть 9 классов и среди них затерялась одна функция, считается ли нормальным хранить эту функцию во views.py среди based Views классов? Или стоит ее вынести в другой файл, например в services.py?

Вот код функции (она работает с ajax запросом)

def add_favourite(request):
    if request.POST.get('action') == 'post':
        id = int(request.POST.get('advertisementId'))
        advertisement = get_object_or_404(Advertisement, id=id)
        if advertisement.favourites.filter(id=request.user.id).exists():
            advertisement.favourites.remove(request.user)
        else:
            advertisement.favourites.add(request.user)
        total_favourites = Advertisement.objects.get(id=id).total_favourites
        return JsonResponse({'total_favourites': total_favourites})

Или может эту функцию можно переделать в class based Views ?

Буду рад любому совету.


Ответы (1 шт):

Автор решения: alex

по хорошему, раз у вас везде CBV, то и эту вьюху надо тоже в CBV переделать. И сделать это очень просто

from django.что-то.там import View
from django.что-то.там import csrf_exempt
from django.utils.decorators import method_decorator


@method_decorator(csrf_exempt, name='dispatch')
class AddFavourite(View):
    
    def post(self, request):
        id = int(request.POST.get('advertisementId'))
        advertisement = get_object_or_404(Advertisement, id=id)
        if advertisement.favourites.filter(id=request.user.id).exists():
            advertisement.favourites.remove(request.user)
        else:
            advertisement.favourites.add(request.user)
        total_favourites = Advertisement.objects.get(id=id).total_favourites
        return JsonResponse({'total_favourites': total_favourites})

→ Ссылка