Merge branch 'feature/courses' into dev

remotes/origin/hasaccess
Ivlev Denis 8 years ago
commit 7fed1cc9c1
  1. 34
      apps/course/migrations/0004_auto_20180128_1311.py
  2. 8
      apps/course/models.py
  3. 4
      apps/course/templates/course/_items.html
  4. 35
      apps/course/views.py
  5. 5
      project/urls.py

@ -0,0 +1,34 @@
# Generated by Django 2.0.1 on 2018-01-28 13:11
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('course', '0003_auto_20180126_1347'),
]
operations = [
migrations.CreateModel(
name='Like',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('update_at', models.DateTimeField(auto_now=True)),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
migrations.AlterModelOptions(
name='course',
options={'ordering': ['-created_at'], 'verbose_name': 'Курс', 'verbose_name_plural': 'Курсы'},
),
migrations.AddField(
model_name='course',
name='likes',
field=models.ManyToManyField(to='course.Like'),
),
]

@ -8,6 +8,13 @@ from .manager import CategoryQuerySet
User = get_user_model()
class Like(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True)
class Course(models.Model):
STATUS_CHOICES = (
(0, 'Pending'),
@ -26,6 +33,7 @@ class Course(models.Model):
is_featured = models.BooleanField(default=False)
url = models.URLField('Ссылка', default='')
status = models.PositiveSmallIntegerField('Статус', default=0, choices=STATUS_CHOICES)
likes = models.ManyToManyField(Like)
created_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True)

@ -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