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 %} {% 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> <div class="courses__view">Подробнее</div>
{% if course.is_featured %} {% if course.is_featured %}
<div class="courses__label courses__label_fav"></div> <div class="courses__label courses__label_fav"></div>
@ -26,7 +26,7 @@
<div class="user__meta"> <div class="user__meta">
<div class="user__date">{{ course.created_at_humanize }}</div> <div class="user__date">{{ course.created_at_humanize }}</div>
<a class="user__likes likes" href="#"> <a class="user__likes likes" href="#">
<div class="likes__counter">253</div> <div class="likes__counter">{{ course.likes.count }}</div>
<div class="likes__icon"> <div class="likes__icon">
<svg class="icon icon-like"> <svg class="icon icon-like">
<use xlink:href="{% get_static_prefix %}img/sprite.svg#icon-like"></use> <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.http import JsonResponse
from django.views.generic import ListView
from django.template import loader from django.template import loader
from django.views.generic import View, ListView
from .models import Course 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 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): class CoursesView(ListView):
model = Course model = Course
context_object_name = 'course_items' context_object_name = 'course_items'

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