LIL-100 Обработчик лайков

remotes/origin/hasaccess
Ivlev Denis 8 years ago
parent 7d212f0a48
commit 54544fb9ef
  1. 4
      apps/course/templates/course/_items.html
  2. 35
      apps/course/views.py
  3. 5
      project/urls.py

@ -1,6 +1,6 @@
{% load static %}
<div class="courses__item"><a class="courses__preview" href="#"><img class="courses__pic" src="{{ course.cover.url }}"/>
<div class="courses__item" data-course data-course-id={{ course.id }} data-likes-count={{ course.likes.count }}><a class="courses__preview" href="#"><img class="courses__pic" src="{{ course.cover.url }}"/>
<div class="courses__view">Подробнее</div>
{% if course.is_featured %}
<div class="courses__label courses__label_fav"></div>
@ -26,7 +26,7 @@
<div class="user__meta">
<div class="user__date">{{ course.created_at_humanize }}</div>
<a class="user__likes likes" href="#">
<div class="likes__counter">253</div>
<div class="likes__counter">{{ course.likes.count }}</div>
<div class="likes__icon">
<svg class="icon icon-like">
<use xlink:href="{% get_static_prefix %}img/sprite.svg#icon-like"></use>

@ -1,11 +1,40 @@
from django.contrib.auth.decorators import login_required
from django.http import JsonResponse
from django.views.generic import ListView
from django.template import loader
from .models import Course
from django.views.generic import View, ListView
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from .models import Course, Like
from .filters import CourseFilter
@login_required
@csrf_exempt
@require_http_methods(['POST'])
def likes(request, course_id):
try:
course = Course.objects.prefetch_related('likes').get(id=course_id)
except Course.DoesNotExist:
return JsonResponse({
'success': False,
'errors': ['Course with id f{cource_id} not found']
})
else:
course_user_likes = course.likes.filter(user=request.user)
if course_user_likes.exists():
is_liked = False
course_user_likes.delete()
else:
course.likes.add(Like.objects.create(user=request.user))
is_liked = True
count = course.likes.count()
return JsonResponse({
"success": True,
"likes_count": count,
"is_liked": is_liked,
})
class CoursesView(ListView):
model = Course
context_object_name = 'course_items'

@ -18,16 +18,17 @@ from django.urls import path, include
from django.views.generic import TemplateView
from django.conf import settings
from apps.course.views import CoursesView
from apps.course.views import CoursesView, likes
urlpatterns = [
path('admin/', admin.site.urls),
path('auth/', include(('apps.auth.urls', 'lilcity'))),
path('courses/', CoursesView.as_view(), name='courses'),
path('courses/<int:course_id>/like/', likes, name='likes'),
path('', TemplateView.as_view(template_name="templates/lilcity/main.html"), name='index'),
]
if settings.DEBUG:
from django.conf.urls.static import static
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Loading…
Cancel
Save