commit
f758b91392
39 changed files with 1223 additions and 534 deletions
@ -0,0 +1,38 @@ |
||||
from constance import config |
||||
from constance.admin import get_values, ConstanceForm |
||||
from rest_framework import serializers |
||||
from rest_framework.fields import SkipField |
||||
from collections import OrderedDict |
||||
|
||||
|
||||
def _set_constance_value(key, value): |
||||
form = ConstanceForm(initial=get_values()) |
||||
field = form.fields[key] |
||||
clean_value = field.clean(field.to_python(value)) |
||||
setattr(config, key, clean_value) |
||||
|
||||
|
||||
class ConfigSerializer(serializers.Serializer): |
||||
INSTAGRAM_CLIENT_ACCESS_TOKEN = serializers.CharField(required=False) |
||||
INSTAGRAM_CLIENT_SECRET = serializers.CharField(required=False) |
||||
INSTAGRAM_RESULTS_TAG = serializers.CharField(required=False) |
||||
INSTAGRAM_RESULTS_PATH = serializers.CharField(required=False) |
||||
SERVICE_COMMISSION = serializers.IntegerField(required=False) |
||||
|
||||
def to_representation(self, instance): |
||||
ret = OrderedDict() |
||||
fields = self._readable_fields |
||||
for field in fields: |
||||
attribute = instance.get(field.field_name) |
||||
ret[field.field_name] = field.to_representation(attribute) |
||||
return ret |
||||
|
||||
def to_internal_value(self, data): |
||||
ret = OrderedDict(get_values()) |
||||
for k, v in data.items(): |
||||
ret[k] = v |
||||
return ret |
||||
|
||||
def update(self, instance, validated_data): |
||||
for k, v in validated_data.items(): |
||||
_set_constance_value(k, v) |
||||
@ -1,19 +1,31 @@ |
||||
import os |
||||
import json |
||||
from time import sleep |
||||
from project.celery import app |
||||
import requests |
||||
import shutil |
||||
|
||||
from constance import config |
||||
from InstagramAPI import InstagramAPI |
||||
from instagram.client import InstagramAPI |
||||
from project.celery import app |
||||
from time import sleep |
||||
|
||||
from django.conf import settings |
||||
|
||||
|
||||
@app.task |
||||
def retrieve_photos(): |
||||
instagram = InstagramAPI( |
||||
config.INSTAGRAM_CLIENT_LOGIN, |
||||
config.INSTAGRAM_CLIENT_PASSWORD, |
||||
api = InstagramAPI( |
||||
access_token=config.INSTAGRAM_CLIENT_ACCESS_TOKEN, |
||||
client_secret=config.INSTAGRAM_CLIENT_SECRET, |
||||
) |
||||
instagram.login() |
||||
sleep(1) |
||||
if instagram.isLoggedIn and instagram.getHashtagFeed(config.INSTAGRAM_RESULTS_TAG): |
||||
with open('s.json', 'w') as f: |
||||
f.write(json.dumps(instagram.LastJson)) |
||||
return instagram.LastJson |
||||
recent_media, next_ = api.user_recent_media(user_id='self', count=20) |
||||
path = os.path.join(settings.BASE_DIR, config.INSTAGRAM_RESULTS_PATH) |
||||
for idx, media in enumerate(recent_media): |
||||
try: |
||||
fname = os.path.join(path, f'{idx}.jpg') |
||||
r = requests.get(media.images['standard_resolution'].url, stream=True) |
||||
if r.status_code == 200: |
||||
with open(fname, 'wb') as f: |
||||
r.raw.decode_content = True |
||||
shutil.copyfileobj(r.raw, f) |
||||
except AttributeError: |
||||
pass |
||||
|
||||
@ -1,367 +1,367 @@ |
||||
[ |
||||
{ |
||||
"model": "course.course", |
||||
"pk": 1, |
||||
"fields": { |
||||
"author": 1, |
||||
"title": "\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u0443\u0440\u0441 \u0434\u043b\u044f \u0434\u0435\u0442\u0435\u0439 \u043f\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043c \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438", |
||||
"short_description": "\u042d\u0442\u043e\u0442 \u043a\u0443\u0440\u0441 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0434\u0435\u0442\u044f\u043c \u0443\u0437\u043d\u0430\u0442\u044c \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0444\u043e\u0440\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u0435\u043b\u044b\u0439 \u0438 \u0445\u0430\u0440\u0438\u0437\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439.", |
||||
"from_author": "", |
||||
"price": "1500.00", |
||||
"is_infinite": false, |
||||
"deferred_start_at": null, |
||||
"category": 2, |
||||
"duration": 1, |
||||
"is_featured": false, |
||||
"status": 1, |
||||
"created_at": "2018-01-27T07:04:41.113Z", |
||||
"update_at": "2018-01-31T15:03:47.118Z", |
||||
"likes": [], |
||||
"materials": [] |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.course", |
||||
"pk": 2, |
||||
"fields": { |
||||
"author": 1, |
||||
"title": "\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u0443\u0440\u0441 \u0434\u043b\u044f \u0434\u0435\u0442\u0435\u0439 \u043f\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043c \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438", |
||||
"short_description": "\u042d\u0442\u043e\u0442 \u043a\u0443\u0440\u0441 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0434\u0435\u0442\u044f\u043c \u0443\u0437\u043d\u0430\u0442\u044c \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0444\u043e\u0440\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u0435\u043b\u044b\u0439 \u0438 \u0445\u0430\u0440\u0438\u0437\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439.", |
||||
"from_author": "", |
||||
"price": "1900.00", |
||||
"is_infinite": false, |
||||
"deferred_start_at": null, |
||||
"category": 1, |
||||
"duration": 1, |
||||
"is_featured": false, |
||||
"status": 1, |
||||
"created_at": "2018-01-27T07:09:03.437Z", |
||||
"update_at": "2018-01-31T15:03:47.115Z", |
||||
"likes": [], |
||||
"materials": [] |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.course", |
||||
"pk": 3, |
||||
"fields": { |
||||
"author": 1, |
||||
"title": "\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u0443\u0440\u0441 \u0434\u043b\u044f \u0434\u0435\u0442\u0435\u0439 \u043f\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043c \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438", |
||||
"short_description": "\u042d\u0442\u043e\u0442 \u043a\u0443\u0440\u0441 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0434\u0435\u0442\u044f\u043c \u0443\u0437\u043d\u0430\u0442\u044c \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0444\u043e\u0440\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u0435\u043b\u044b\u0439 \u0438 \u0445\u0430\u0440\u0438\u0437\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439.", |
||||
"from_author": "", |
||||
"price": "100.00", |
||||
"is_infinite": false, |
||||
"deferred_start_at": null, |
||||
"category": 9, |
||||
"duration": 1, |
||||
"is_featured": false, |
||||
"status": 1, |
||||
"created_at": "2018-01-27T07:09:03.442Z", |
||||
"update_at": "2018-01-31T15:03:47.112Z", |
||||
"likes": [], |
||||
"materials": [] |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.course", |
||||
"pk": 4, |
||||
"fields": { |
||||
"author": 1, |
||||
"title": "\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u0443\u0440\u0441 \u0434\u043b\u044f \u0434\u0435\u0442\u0435\u0439 \u043f\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043c \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438", |
||||
"short_description": "\u042d\u0442\u043e\u0442 \u043a\u0443\u0440\u0441 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0434\u0435\u0442\u044f\u043c \u0443\u0437\u043d\u0430\u0442\u044c \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0444\u043e\u0440\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u0435\u043b\u044b\u0439 \u0438 \u0445\u0430\u0440\u0438\u0437\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439.", |
||||
"from_author": "", |
||||
"price": "400.00", |
||||
"is_infinite": false, |
||||
"deferred_start_at": null, |
||||
"category": 8, |
||||
"duration": 1, |
||||
"is_featured": false, |
||||
"status": 1, |
||||
"created_at": "2018-01-27T07:09:03.445Z", |
||||
"update_at": "2018-01-31T15:03:47.108Z", |
||||
"likes": [], |
||||
"materials": [] |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.course", |
||||
"pk": 5, |
||||
"fields": { |
||||
"author": 1, |
||||
"title": "\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u0443\u0440\u0441 \u0434\u043b\u044f \u0434\u0435\u0442\u0435\u0439 \u043f\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043c \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438", |
||||
"short_description": "\u042d\u0442\u043e\u0442 \u043a\u0443\u0440\u0441 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0434\u0435\u0442\u044f\u043c \u0443\u0437\u043d\u0430\u0442\u044c \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0444\u043e\u0440\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u0435\u043b\u044b\u0439 \u0438 \u0445\u0430\u0440\u0438\u0437\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439.", |
||||
"from_author": "", |
||||
"price": "1800.00", |
||||
"is_infinite": false, |
||||
"deferred_start_at": null, |
||||
"category": 7, |
||||
"duration": 1, |
||||
"is_featured": false, |
||||
"status": 1, |
||||
"created_at": "2018-01-27T07:09:03.449Z", |
||||
"update_at": "2018-01-31T15:03:47.104Z", |
||||
"likes": [], |
||||
"materials": [] |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.course", |
||||
"pk": 6, |
||||
"fields": { |
||||
"author": 1, |
||||
"title": "\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u0443\u0440\u0441 \u0434\u043b\u044f \u0434\u0435\u0442\u0435\u0439 \u043f\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043c \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438", |
||||
"short_description": "\u042d\u0442\u043e\u0442 \u043a\u0443\u0440\u0441 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0434\u0435\u0442\u044f\u043c \u0443\u0437\u043d\u0430\u0442\u044c \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0444\u043e\u0440\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u0435\u043b\u044b\u0439 \u0438 \u0445\u0430\u0440\u0438\u0437\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439.", |
||||
"from_author": "", |
||||
"price": "100.00", |
||||
"is_infinite": false, |
||||
"deferred_start_at": null, |
||||
"category": 6, |
||||
"duration": 1, |
||||
"is_featured": false, |
||||
"status": 1, |
||||
"created_at": "2018-01-27T07:09:03.452Z", |
||||
"update_at": "2018-01-31T15:03:47.101Z", |
||||
"likes": [], |
||||
"materials": [] |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.course", |
||||
"pk": 7, |
||||
"fields": { |
||||
"author": 1, |
||||
"title": "\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u0443\u0440\u0441 \u0434\u043b\u044f \u0434\u0435\u0442\u0435\u0439 \u043f\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043c \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438", |
||||
"short_description": "\u042d\u0442\u043e\u0442 \u043a\u0443\u0440\u0441 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0434\u0435\u0442\u044f\u043c \u0443\u0437\u043d\u0430\u0442\u044c \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0444\u043e\u0440\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u0435\u043b\u044b\u0439 \u0438 \u0445\u0430\u0440\u0438\u0437\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439.", |
||||
"from_author": "", |
||||
"price": "1600.00", |
||||
"is_infinite": false, |
||||
"deferred_start_at": null, |
||||
"category": 5, |
||||
"duration": 1, |
||||
"is_featured": false, |
||||
"status": 1, |
||||
"created_at": "2018-01-27T07:09:03.455Z", |
||||
"update_at": "2018-01-31T15:03:47.097Z", |
||||
"likes": [], |
||||
"materials": [] |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.course", |
||||
"pk": 8, |
||||
"fields": { |
||||
"author": 1, |
||||
"title": "\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u0443\u0440\u0441 \u0434\u043b\u044f \u0434\u0435\u0442\u0435\u0439 \u043f\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043c \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438", |
||||
"short_description": "\u042d\u0442\u043e\u0442 \u043a\u0443\u0440\u0441 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0434\u0435\u0442\u044f\u043c \u0443\u0437\u043d\u0430\u0442\u044c \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0444\u043e\u0440\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u0435\u043b\u044b\u0439 \u0438 \u0445\u0430\u0440\u0438\u0437\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439.", |
||||
"from_author": "", |
||||
"price": "1900.00", |
||||
"is_infinite": false, |
||||
"deferred_start_at": null, |
||||
"category": 4, |
||||
"duration": 1, |
||||
"is_featured": false, |
||||
"status": 1, |
||||
"created_at": "2018-01-27T07:09:03.458Z", |
||||
"update_at": "2018-01-31T15:03:47.093Z", |
||||
"likes": [], |
||||
"materials": [] |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.course", |
||||
"pk": 9, |
||||
"fields": { |
||||
"author": 1, |
||||
"title": "\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u0443\u0440\u0441 \u0434\u043b\u044f \u0434\u0435\u0442\u0435\u0439 \u043f\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043c \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438", |
||||
"short_description": "\u042d\u0442\u043e\u0442 \u043a\u0443\u0440\u0441 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0434\u0435\u0442\u044f\u043c \u0443\u0437\u043d\u0430\u0442\u044c \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0444\u043e\u0440\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u0435\u043b\u044b\u0439 \u0438 \u0445\u0430\u0440\u0438\u0437\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439.", |
||||
"from_author": "", |
||||
"price": "200.00", |
||||
"is_infinite": false, |
||||
"deferred_start_at": null, |
||||
"category": 3, |
||||
"duration": 1, |
||||
"is_featured": false, |
||||
"status": 1, |
||||
"created_at": "2018-01-27T07:09:03.461Z", |
||||
"update_at": "2018-01-31T15:03:47.089Z", |
||||
"likes": [], |
||||
"materials": [] |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.course", |
||||
"pk": 10, |
||||
"fields": { |
||||
"author": 1, |
||||
"title": "\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u0443\u0440\u0441 \u0434\u043b\u044f \u0434\u0435\u0442\u0435\u0439 \u043f\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043c \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438", |
||||
"short_description": "\u042d\u0442\u043e\u0442 \u043a\u0443\u0440\u0441 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0434\u0435\u0442\u044f\u043c \u0443\u0437\u043d\u0430\u0442\u044c \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0444\u043e\u0440\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u0435\u043b\u044b\u0439 \u0438 \u0445\u0430\u0440\u0438\u0437\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439.", |
||||
"from_author": "", |
||||
"price": "800.00", |
||||
"is_infinite": false, |
||||
"deferred_start_at": null, |
||||
"category": 2, |
||||
"duration": 1, |
||||
"is_featured": true, |
||||
"status": 1, |
||||
"created_at": "2018-01-27T07:09:03.464Z", |
||||
"update_at": "2018-01-31T15:03:47.086Z", |
||||
"likes": [], |
||||
"materials": [ |
||||
1, |
||||
2, |
||||
3 |
||||
] |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.course", |
||||
"pk": 11, |
||||
"fields": { |
||||
"author": 1, |
||||
"title": "\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u0443\u0440\u0441 \u0434\u043b\u044f \u0434\u0435\u0442\u0435\u0439 \u043f\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043c \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438", |
||||
"short_description": "\u042d\u0442\u043e\u0442 \u043a\u0443\u0440\u0441 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0434\u0435\u0442\u044f\u043c \u0443\u0437\u043d\u0430\u0442\u044c \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0444\u043e\u0440\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u0435\u043b\u044b\u0439 \u0438 \u0445\u0430\u0440\u0438\u0437\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439.", |
||||
"from_author": "", |
||||
"price": "100.00", |
||||
"is_infinite": false, |
||||
"deferred_start_at": "2018-02-28T12:00:00Z", |
||||
"category": 1, |
||||
"duration": 1, |
||||
"is_featured": false, |
||||
"status": 1, |
||||
"created_at": "2018-01-27T07:09:03.467Z", |
||||
"update_at": "2018-01-31T15:03:47.080Z", |
||||
"likes": [], |
||||
"materials": [ |
||||
1, |
||||
2, |
||||
3 |
||||
] |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.category", |
||||
"pk": 1, |
||||
"fields": { |
||||
"title": "\u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.category", |
||||
"pk": 2, |
||||
"fields": { |
||||
"title": "\u0430\u043a\u0432\u0430\u0440\u0435\u043b\u044c" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.category", |
||||
"pk": 3, |
||||
"fields": { |
||||
"title": "\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u044f" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.category", |
||||
"pk": 4, |
||||
"fields": { |
||||
"title": "\u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.category", |
||||
"pk": 5, |
||||
"fields": { |
||||
"title": "\u043f\u0430\u0441\u0442\u0435\u043b\u044c" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.category", |
||||
"pk": 6, |
||||
"fields": { |
||||
"title": "\u043f\u043b\u0430\u0441\u0442\u0438\u043b\u0438\u043d" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.category", |
||||
"pk": 7, |
||||
"fields": { |
||||
"title": "\u043a\u0440\u0435\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043c\u044b\u0448\u043b\u0435\u043d\u0438\u0435" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.category", |
||||
"pk": 8, |
||||
"fields": { |
||||
"title": "\u043c\u043e\u0442\u043e\u0440\u0438\u043a\u0430" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.category", |
||||
"pk": 9, |
||||
"fields": { |
||||
"title": "\u0436\u0438\u0432\u043e\u043f\u0438\u0441\u044c" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.lesson", |
||||
"pk": 1, |
||||
"fields": { |
||||
"title": "1 \u0423\u0420\u041e\u041a", |
||||
"short_description": "\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u044e\u0436\u0435\u0442, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043a\u0443\u0440\u0441\u0435 \u0438 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0433\u0435\u0440\u043e\u044f \u0432\u0430\u0448\u0435\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438. \u0421 \u044d\u0442\u0438\u043c \u0433\u0435\u0440\u043e\u0435\u043c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u043a\u0443\u0440\u0441\u0430.", |
||||
"course": 11, |
||||
"created_at": "2018-01-31T15:06:14.830Z", |
||||
"update_at": "2018-01-31T15:06:14.830Z" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.lesson", |
||||
"pk": 2, |
||||
"fields": { |
||||
"title": "2 \u0423\u0420\u041e\u041a", |
||||
"short_description": "\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0441 \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0433\u0435\u0440\u043e\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430. \u041f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0443 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u00ab\u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u044b\u00bb. \u0420\u0438\u0441\u0443\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043e\u0431\u0440\u0430\u0437\u0430 \u0432 \u0441\u0432\u043e\u0435\u043c \u0441\u0442\u0438\u043b\u0435.\r\n\r\n\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0437 \u043d\u0438\u0445 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430. \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u0430\u043c\u044b\u0435 \u0443\u0434\u0430\u0447\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0438\u0445 \u0432 \u043e\u0434\u043d\u043e\u043c \u043d\u0430\u0431\u0440\u043e\u0441\u043a\u0435.", |
||||
"course": 11, |
||||
"created_at": "2018-01-31T15:06:46.772Z", |
||||
"update_at": "2018-01-31T15:06:46.772Z" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.lesson", |
||||
"pk": 3, |
||||
"fields": { |
||||
"title": "3 \u0423\u0420\u041e\u041a", |
||||
"short_description": "\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043e\u0436\u0438\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430. \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c 5 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u0433\u0435\u0440\u043e\u044f \u0438 \u0442\u043e\u0433\u043e \u0441\u044e\u0436\u0435\u0442\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0443\u0447\u0430\u0441\u0442\u0438\u0435, \u0440\u0438\u0441\u0443\u0435\u043c \u044d\u0441\u043a\u0438\u0437\u044b \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u044b\u0445 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043f\u043e\u0437\u0430\u0445 \u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438.\r\n\r\n\u0412\u044b\u0434\u0435\u043b\u044f\u0435\u043c 5 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u044b\u0445 \u044d\u043c\u043e\u0446\u0438\u0439 \u0434\u043b\u044f \u0433\u0435\u0440\u043e\u044f, \u043d\u0430\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c. \u041f\u043e \u044d\u043c\u043e\u0446\u0438\u044f\u043c \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u043c \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u044b \u0438 \u0441\u0442\u0438\u043b\u0438\u0437\u0443\u0435\u043c \u0438\u0445 \u0432 \u0441\u0432\u043e\u0435\u043c \u0441\u0442\u0438\u043b\u0435.", |
||||
"course": 11, |
||||
"created_at": "2018-01-31T15:07:08.979Z", |
||||
"update_at": "2018-01-31T15:07:08.979Z" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.material", |
||||
"pk": 1, |
||||
"fields": { |
||||
"title": "\u0411\u0443\u043c\u0430\u0433\u0430 \u0430\u043a\u0432\u0430\u0440\u0435\u043b\u044c\u043d\u0430\u044f", |
||||
"short_description": "\u0411\u0443\u043c\u0430\u0433\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0430\u043a\u0432\u0430\u0440\u0435\u043b\u044c\u044e \u0438\u043c\u0435\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u042d\u0442\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u0430\u043a\u0432\u0430\u0440\u0435\u043b\u044c \u2014 \u043a\u0440\u0430\u0441\u043a\u0430 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u0430\u044f, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0444\u0430\u043a\u0442\u0443\u0440\u0430 \u0431\u0443\u043c\u0430\u0433\u0438 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u043a\u0440\u0430\u0441\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f.", |
||||
"created_at": "2018-01-31T14:55:48.394Z", |
||||
"update_at": "2018-01-31T14:55:48.394Z" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.material", |
||||
"pk": 2, |
||||
"fields": { |
||||
"title": "\u041a\u0438\u0441\u0442\u043e\u0447\u043a\u0438 \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f", |
||||
"short_description": "\u041a\u0438\u0441\u0442\u044c \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043f\u043e\u043a\u0440\u0430\u0441\u043a\u0438 \u0438 \u0436\u0438\u0432\u043e\u043f\u0438\u0441\u0438. \u041a\u0438\u0441\u0442\u0438 \u0434\u0435\u043b\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0449\u0435\u0442\u0438\u043d\u044b \u0438 \u0445\u0432\u043e\u0441\u0442\u043e\u0432\u044b\u0445 \u0432\u043e\u043b\u043e\u0441\u043a\u043e\u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0436\u0438\u0432\u043e\u0442\u043d\u044b\u0445.", |
||||
"created_at": "2018-01-31T14:57:37.751Z", |
||||
"update_at": "2018-01-31T14:57:37.751Z" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.material", |
||||
"pk": 3, |
||||
"fields": { |
||||
"title": "\u041a\u0440\u0430\u0441\u043a\u0438 \u0430\u043a\u0432\u0430\u0440\u0435\u043b\u044c\u043d\u044b\u0435", |
||||
"short_description": "\u0417\u0430\u0432\u043e\u0434 \u0445\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043a\u0440\u0430\u0441\u043e\u043a \u00ab\u041d\u0435\u0432\u0441\u043a\u0430\u044f \u043f\u0430\u043b\u0438\u0442\u0440\u0430\u00bb \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0430\u043a\u0432\u0430\u0440\u0435\u043b\u044c 80 \u043b\u0435\u0442, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0434\u0443\u043a\u0446\u0438\u0438 \u0432\u044b\u0441\u043e\u0447\u0430\u0439\u0448\u0435\u0433\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430. \u041f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0440\u0435\u0446\u0435\u043f\u0442\u0443\u0440\u044b, \u043e\u0442\u043b\u0430\u0436\u0435\u043d\u043d\u0430\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u0438\u0437\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0430\u043a\u0432\u0430\u0440\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u0440\u0430\u0441\u043a\u0438 \u0432\u0438\u0437\u0438\u0442\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u043e\u0439 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u044f \u0432 \u0420\u043e\u0441\u0441\u0438\u0438", |
||||
"created_at": "2018-01-31T14:58:46.209Z", |
||||
"update_at": "2018-01-31T14:58:46.209Z" |
||||
} |
||||
{ |
||||
"model": "course.course", |
||||
"pk": 1, |
||||
"fields": { |
||||
"author": 1, |
||||
"title": "Базовый курс для детей по основам иллюстрации", |
||||
"short_description": "Этот курс поможет детям узнать о том как из простых форм создавать веселый и харизматичных персонажей.", |
||||
"from_author": "", |
||||
"price": "1500.00", |
||||
"is_infinite": false, |
||||
"deferred_start_at": null, |
||||
"category": 2, |
||||
"duration": 1, |
||||
"is_featured": false, |
||||
"status": 1, |
||||
"created_at": "2018-01-27T07:04:41.113Z", |
||||
"update_at": "2018-01-31T15:03:47.118Z", |
||||
"likes": [], |
||||
"materials": [] |
||||
} |
||||
] |
||||
}, |
||||
{ |
||||
"model": "course.course", |
||||
"pk": 2, |
||||
"fields": { |
||||
"author": 1, |
||||
"title": "Базовый курс для детей по основам иллюстрации", |
||||
"short_description": "Этот курс поможет детям узнать о том как из простых форм создавать веселый и харизматичных персонажей.", |
||||
"from_author": "", |
||||
"price": "1900.00", |
||||
"is_infinite": false, |
||||
"deferred_start_at": null, |
||||
"category": 1, |
||||
"duration": 1, |
||||
"is_featured": false, |
||||
"status": 1, |
||||
"created_at": "2018-01-27T07:09:03.437Z", |
||||
"update_at": "2018-01-31T15:03:47.115Z", |
||||
"likes": [], |
||||
"materials": [] |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.course", |
||||
"pk": 3, |
||||
"fields": { |
||||
"author": 1, |
||||
"title": "Базовый курс для детей по основам иллюстрации", |
||||
"short_description": "Этот курс поможет детям узнать о том как из простых форм создавать веселый и харизматичных персонажей.", |
||||
"from_author": "", |
||||
"price": "100.00", |
||||
"is_infinite": false, |
||||
"deferred_start_at": null, |
||||
"category": 9, |
||||
"duration": 1, |
||||
"is_featured": false, |
||||
"status": 1, |
||||
"created_at": "2018-01-27T07:09:03.442Z", |
||||
"update_at": "2018-01-31T15:03:47.112Z", |
||||
"likes": [], |
||||
"materials": [] |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.course", |
||||
"pk": 4, |
||||
"fields": { |
||||
"author": 1, |
||||
"title": "Базовый курс для детей по основам иллюстрации", |
||||
"short_description": "Этот курс поможет детям узнать о том как из простых форм создавать веселый и харизматичных персонажей.", |
||||
"from_author": "", |
||||
"price": "400.00", |
||||
"is_infinite": false, |
||||
"deferred_start_at": null, |
||||
"category": 8, |
||||
"duration": 1, |
||||
"is_featured": false, |
||||
"status": 1, |
||||
"created_at": "2018-01-27T07:09:03.445Z", |
||||
"update_at": "2018-01-31T15:03:47.108Z", |
||||
"likes": [], |
||||
"materials": [] |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.course", |
||||
"pk": 5, |
||||
"fields": { |
||||
"author": 1, |
||||
"title": "Базовый курс для детей по основам иллюстрации", |
||||
"short_description": "Этот курс поможет детям узнать о том как из простых форм создавать веселый и харизматичных персонажей.", |
||||
"from_author": "", |
||||
"price": "1800.00", |
||||
"is_infinite": false, |
||||
"deferred_start_at": null, |
||||
"category": 7, |
||||
"duration": 1, |
||||
"is_featured": false, |
||||
"status": 1, |
||||
"created_at": "2018-01-27T07:09:03.449Z", |
||||
"update_at": "2018-01-31T15:03:47.104Z", |
||||
"likes": [], |
||||
"materials": [] |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.course", |
||||
"pk": 6, |
||||
"fields": { |
||||
"author": 1, |
||||
"title": "Базовый курс для детей по основам иллюстрации", |
||||
"short_description": "Этот курс поможет детям узнать о том как из простых форм создавать веселый и харизматичных персонажей.", |
||||
"from_author": "", |
||||
"price": "100.00", |
||||
"is_infinite": false, |
||||
"deferred_start_at": null, |
||||
"category": 6, |
||||
"duration": 1, |
||||
"is_featured": false, |
||||
"status": 1, |
||||
"created_at": "2018-01-27T07:09:03.452Z", |
||||
"update_at": "2018-01-31T15:03:47.101Z", |
||||
"likes": [], |
||||
"materials": [] |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.course", |
||||
"pk": 7, |
||||
"fields": { |
||||
"author": 1, |
||||
"title": "Базовый курс для детей по основам иллюстрации", |
||||
"short_description": "Этот курс поможет детям узнать о том как из простых форм создавать веселый и харизматичных персонажей.", |
||||
"from_author": "", |
||||
"price": "1600.00", |
||||
"is_infinite": false, |
||||
"deferred_start_at": null, |
||||
"category": 5, |
||||
"duration": 1, |
||||
"is_featured": false, |
||||
"status": 1, |
||||
"created_at": "2018-01-27T07:09:03.455Z", |
||||
"update_at": "2018-01-31T15:03:47.097Z", |
||||
"likes": [], |
||||
"materials": [] |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.course", |
||||
"pk": 8, |
||||
"fields": { |
||||
"author": 1, |
||||
"title": "Базовый курс для детей по основам иллюстрации", |
||||
"short_description": "Этот курс поможет детям узнать о том как из простых форм создавать веселый и харизматичных персонажей.", |
||||
"from_author": "", |
||||
"price": "1900.00", |
||||
"is_infinite": false, |
||||
"deferred_start_at": null, |
||||
"category": 4, |
||||
"duration": 1, |
||||
"is_featured": false, |
||||
"status": 1, |
||||
"created_at": "2018-01-27T07:09:03.458Z", |
||||
"update_at": "2018-01-31T15:03:47.093Z", |
||||
"likes": [], |
||||
"materials": [] |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.course", |
||||
"pk": 9, |
||||
"fields": { |
||||
"author": 1, |
||||
"title": "Базовый курс для детей по основам иллюстрации", |
||||
"short_description": "Этот курс поможет детям узнать о том как из простых форм создавать веселый и харизматичных персонажей.", |
||||
"from_author": "", |
||||
"price": "200.00", |
||||
"is_infinite": false, |
||||
"deferred_start_at": null, |
||||
"category": 3, |
||||
"duration": 1, |
||||
"is_featured": false, |
||||
"status": 1, |
||||
"created_at": "2018-01-27T07:09:03.461Z", |
||||
"update_at": "2018-01-31T15:03:47.089Z", |
||||
"likes": [], |
||||
"materials": [] |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.course", |
||||
"pk": 10, |
||||
"fields": { |
||||
"author": 1, |
||||
"title": "Базовый курс для детей по основам иллюстрации", |
||||
"short_description": "Этот курс поможет детям узнать о том как из простых форм создавать веселый и харизматичных персонажей.", |
||||
"from_author": "", |
||||
"price": "800.00", |
||||
"is_infinite": false, |
||||
"deferred_start_at": null, |
||||
"category": 2, |
||||
"duration": 1, |
||||
"is_featured": true, |
||||
"status": 1, |
||||
"created_at": "2018-01-27T07:09:03.464Z", |
||||
"update_at": "2018-01-31T15:03:47.086Z", |
||||
"likes": [], |
||||
"materials": [ |
||||
1, |
||||
2, |
||||
3 |
||||
] |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.course", |
||||
"pk": 11, |
||||
"fields": { |
||||
"author": 1, |
||||
"title": "Базовый курс для детей по основам иллюстрации", |
||||
"short_description": "Этот курс поможет детям узнать о том как из простых форм создавать веселый и харизматичных персонажей.", |
||||
"from_author": "", |
||||
"price": "100.00", |
||||
"is_infinite": false, |
||||
"deferred_start_at": "2018-02-28T12:00:00Z", |
||||
"category": 1, |
||||
"duration": 1, |
||||
"is_featured": false, |
||||
"status": 1, |
||||
"created_at": "2018-01-27T07:09:03.467Z", |
||||
"update_at": "2018-01-31T15:03:47.080Z", |
||||
"likes": [], |
||||
"materials": [ |
||||
1, |
||||
2, |
||||
3 |
||||
] |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.category", |
||||
"pk": 1, |
||||
"fields": { |
||||
"title": "персонаж" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.category", |
||||
"pk": 2, |
||||
"fields": { |
||||
"title": "акварель" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.category", |
||||
"pk": 3, |
||||
"fields": { |
||||
"title": "иллюстрация" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.category", |
||||
"pk": 4, |
||||
"fields": { |
||||
"title": "анимация" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.category", |
||||
"pk": 5, |
||||
"fields": { |
||||
"title": "пастель" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.category", |
||||
"pk": 6, |
||||
"fields": { |
||||
"title": "пластилин" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.category", |
||||
"pk": 7, |
||||
"fields": { |
||||
"title": "креативное мышление" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.category", |
||||
"pk": 8, |
||||
"fields": { |
||||
"title": "моторика" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.category", |
||||
"pk": 9, |
||||
"fields": { |
||||
"title": "живопись" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.lesson", |
||||
"pk": 1, |
||||
"fields": { |
||||
"title": "1 УРОК", |
||||
"short_description": "Выбираем сюжет, с которым мы будем работать на курсе и главного героя вашей истории. С этим героем мы будем работать на протяжении всего курса.", |
||||
"course": 11, |
||||
"created_at": "2018-01-31T15:06:14.830Z", |
||||
"update_at": "2018-01-31T15:06:14.830Z" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.lesson", |
||||
"pk": 2, |
||||
"fields": { |
||||
"title": "2 УРОК", |
||||
"short_description": "Собираем материал и экспериментируем с образом героя, используя полученный список характерных особенностей персонажа. По каждому признаку нужно будет собрать «референсы». Рисуем элементы образа в своем стиле.\\r\\n\\r\\nСобираем из них нашего персонажа. Выбираем самые удачные элементы, объединяем их в одном наброске.", |
||||
"course": 11, |
||||
"created_at": "2018-01-31T15:06:46.772Z", |
||||
"update_at": "2018-01-31T15:06:46.772Z" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.lesson", |
||||
"pk": 3, |
||||
"fields": { |
||||
"title": "3 УРОК", |
||||
"short_description": "Попробуем оживить персонажа. Выбираем 5 характерных действий для вашего героя и того сюжета, в котором он принимает участие, рисуем эскизы вашего персонажа в разных характерных для него позах и движении.\\r\\n\\r\\nВыделяем 5 характерных эмоций для героя, над которым работаем. По эмоциям подбираем референсы и стилизуем их в своем стиле.", |
||||
"course": 11, |
||||
"created_at": "2018-01-31T15:07:08.979Z", |
||||
"update_at": "2018-01-31T15:07:08.979Z" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.material", |
||||
"pk": 1, |
||||
"fields": { |
||||
"title": "Бумага акварельная", |
||||
"short_description": "Бумага для работы с акварелью имеет большое значение. Это объясняется тем, что акварель — краска прозрачная, а значит фактура бумаги будет достаточно сильно влиять на внешний вид красочного слоя.", |
||||
"created_at": "2018-01-31T14:55:48.394Z", |
||||
"update_at": "2018-01-31T14:55:48.394Z" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.material", |
||||
"pk": 2, |
||||
"fields": { |
||||
"title": "Кисточки для рисования", |
||||
"short_description": "Кисть — инструмент для покраски и живописи. Кисти делаются из щетины и хвостовых волосков различных животных.", |
||||
"created_at": "2018-01-31T14:57:37.751Z", |
||||
"update_at": "2018-01-31T14:57:37.751Z" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "course.material", |
||||
"pk": 3, |
||||
"fields": { |
||||
"title": "Краски акварельные", |
||||
"short_description": "Завод художественных красок «Невская палитра» выпускает акварель 80 лет, сохраняя традиции производства продукции высочайшего качества. Проверенные временем рецептуры, отлаженная технология изготовления сделали акварельные краски визитной карточкой предприятия в России", |
||||
"created_at": "2018-01-31T14:58:46.209Z", |
||||
"update_at": "2018-01-31T14:58:46.209Z" |
||||
} |
||||
} |
||||
] |
||||
|
||||
@ -1,34 +1,44 @@ |
||||
{% load static %} |
||||
{% load rupluralize from plural %} |
||||
{% if school_payment %} |
||||
<div class="school__page"> |
||||
<div class="school__block"> |
||||
<div class="school__month"> |
||||
<div class="school__month__wrap"> |
||||
<div class="school__month__title">Январь</div> |
||||
<div class="school__month__subtitle">Осталось 14 дней</div> |
||||
<div class="school__month__image"> |
||||
<img class="school__month__image__pic" src="/static/img/order.jpg"> |
||||
</div> |
||||
</div> |
||||
<div class="school__block"> |
||||
<div class="school__month"> |
||||
<div class="school__month__wrap"> |
||||
<div class="school__month__title"> |
||||
Дата окончания: |
||||
<p>{{ school_payment.date_end }}</p> |
||||
</div> |
||||
<div class="school__btn"> |
||||
<a class="buy__btn btn btn_md" href="#" {% if user.is_authenticated %} |
||||
data-popup=".js-popup-buy" |
||||
{% else %} |
||||
data-popup=".js-popup-auth" |
||||
{% endif %}>ПРОДЛИТЬ ШКОЛУ</a> |
||||
</div> |
||||
<div class="school__btn__prev"> |
||||
<a class="school__prev__btn btn" href="#">ПОСМОТРЕТЬ ПРЕДЫДУЩИЕ УРОКИ</a> |
||||
<div class="school__month__subtitle">Осталось: {{ school_days_left | rupluralize:"день,дня,дней" }}</div> |
||||
<div class="school__month__image"> |
||||
<img class="school__month__image__pic" src="{% static 'img/order.jpg' %}"> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="school__block school__list"> |
||||
{% for course in course_items %} |
||||
<div class="school__item"> |
||||
<div class="school__title">Понедельник</div> |
||||
<div class="school__subtitle">Пластилиновая живопись.</div> |
||||
<div class="school__content"> |
||||
<p>Научимся смешивать цвета, получать красивые оттенки и создавать картины из пластилина разными техниками. Узнаем как хранить и ухаживать за такими работами.</p> |
||||
</div> |
||||
</div> |
||||
{% endfor %} |
||||
<div class="school__btn"> |
||||
<a |
||||
class="buy__btn btn btn_md" |
||||
href="#" |
||||
{% if user.is_authenticated %} |
||||
data-popup=".js-popup-buy" |
||||
{% else %} |
||||
data-popup=".js-popup-auth" |
||||
{% endif %}>ПРОДЛИТЬ ШКОЛУ</a> |
||||
</div> |
||||
<div class="school__btn__prev"> |
||||
<a class="school__prev__btn btn" href="#">ПОСМОТРЕТЬ ПРЕДЫДУЩИЕ УРОКИ</a> |
||||
</div> |
||||
</div> |
||||
<div class="school__block school__list"> |
||||
{% for school_schedule in school_schedules %} |
||||
<div class="school__item"> |
||||
<div class="school__title">{{ school_schedule }}</div> |
||||
<div class="school__subtitle">{{ school_schedule.title }}</div> |
||||
<div class="school__content"> |
||||
<p>{{ school_schedule.description }}</p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
{% endfor %} |
||||
</div> |
||||
</div> |
||||
{% endif %} |
||||
|
||||
@ -0,0 +1,8 @@ |
||||
{% extends "notification/email/_base.html" %} |
||||
|
||||
{% block content %} |
||||
<p style="margin: 0 0 20px">К сожалению вам отказано в выводе средств!</p> |
||||
<div style="margin-bottom: 10px;"> |
||||
<p>{{ author_balance.cause }}</p> |
||||
</div> |
||||
{% endblock content %} |
||||
@ -0,0 +1,18 @@ |
||||
# Generated by Django 2.0.2 on 2018-02-28 11:02 |
||||
|
||||
from django.db import migrations, models |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('payment', '0010_auto_20180227_0933'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AddField( |
||||
model_name='authorbalance', |
||||
name='cause', |
||||
field=models.TextField(default='', verbose_name='Причина отказа'), |
||||
), |
||||
] |
||||
@ -0,0 +1,18 @@ |
||||
# Generated by Django 2.0.2 on 2018-03-02 07:40 |
||||
|
||||
from django.db import migrations, models |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('payment', '0011_authorbalance_cause'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AlterField( |
||||
model_name='authorbalance', |
||||
name='cause', |
||||
field=models.TextField(blank=True, null=True, verbose_name='Причина отказа'), |
||||
), |
||||
] |
||||
@ -0,0 +1,36 @@ |
||||
# Generated by Django 2.0.2 on 2018-03-04 17:57 |
||||
|
||||
import django.core.validators |
||||
from django.db import migrations, models |
||||
import django.utils.timezone |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('payment', '0012_auto_20180302_0740'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AddField( |
||||
model_name='authorbalance', |
||||
name='card', |
||||
field=models.CharField(blank=True, max_length=20, null=True, validators=[django.core.validators.RegexValidator(regex='^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\\\d{3})\\d{11})$')]), |
||||
), |
||||
migrations.AddField( |
||||
model_name='authorbalance', |
||||
name='created_at', |
||||
field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now), |
||||
preserve_default=False, |
||||
), |
||||
migrations.AddField( |
||||
model_name='authorbalance', |
||||
name='declined_send_at', |
||||
field=models.DateTimeField(blank=True, null=True), |
||||
), |
||||
migrations.AddField( |
||||
model_name='authorbalance', |
||||
name='update_at', |
||||
field=models.DateTimeField(auto_now=True), |
||||
), |
||||
] |
||||
@ -0,0 +1,29 @@ |
||||
# Generated by Django 2.0.2 on 2018-03-07 06:17 |
||||
|
||||
from django.db import migrations, models |
||||
import django.utils.timezone |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('payment', '0013_auto_20180304_1757'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AlterModelOptions( |
||||
name='payment', |
||||
options={'ordering': ('created_at',), 'verbose_name': 'Платеж', 'verbose_name_plural': 'Платежи'}, |
||||
), |
||||
migrations.AddField( |
||||
model_name='payment', |
||||
name='created_at', |
||||
field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now), |
||||
preserve_default=False, |
||||
), |
||||
migrations.AddField( |
||||
model_name='payment', |
||||
name='update_at', |
||||
field=models.DateTimeField(auto_now=True), |
||||
), |
||||
] |
||||
@ -0,0 +1,18 @@ |
||||
# Generated by Django 2.0.2 on 2018-03-07 09:11 |
||||
|
||||
from django.db import migrations, models |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('payment', '0014_auto_20180307_0617'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AlterField( |
||||
model_name='payment', |
||||
name='status', |
||||
field=models.PositiveSmallIntegerField(choices=[(0, 'regular'), (1, 'goodwill'), (2, 'negative'), (200, 'risk under review'), (201, 'risk reviewed accepted'), (202, 'risk reviewed declined'), (203, 'risk authorization voided'), (12, 'subscription cancelation'), (13, 'subscription expired'), (14, 'subscription payment failed')], null=True, verbose_name='Статус платежа'), |
||||
), |
||||
] |
||||
@ -0,0 +1,93 @@ |
||||
[ |
||||
{ |
||||
"model": "school.schoolschedule", |
||||
"pk": 1, |
||||
"fields": { |
||||
"weekday": 1, |
||||
"title": "Акварель", |
||||
"description": "Сальвадор Дали родился в Испании 11 мая 1904 года в городе Фигерасе, провинция Жирона, в семье зажиточного нотариуса. По национальности был каталонцем, воспринимал себя в этом качестве и настаивал на этой своей особенности.", |
||||
"materials": "У него была сестра, Анна Мария Дали (исп. Anna Maria Dalí, 6 января 1908 — 16 мая 1989), и старший брат (12 октября 1901 — 1 августа 1903), который умер от менингита.", |
||||
"age": 0, |
||||
"month_price": "500.00", |
||||
"day_discount": "0.00" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "school.schoolschedule", |
||||
"pk": 2, |
||||
"fields": { |
||||
"weekday": 2, |
||||
"title": "Живопись", |
||||
"description": "Позднее в возрасте 5 лет на его могиле родители сказали Сальвадору, что он — реинкарнация своего старшего брата.", |
||||
"materials": "В детстве Дали был сообразительным, но заносчивым и неуправляемым ребёнком.", |
||||
"age": 0, |
||||
"month_price": "500.00", |
||||
"day_discount": "0.00" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "school.schoolschedule", |
||||
"pk": 3, |
||||
"fields": { |
||||
"weekday": 3, |
||||
"title": "Пластелин", |
||||
"description": "Однажды он затеял скандал на торговой площади ради леденца, вокруг собралась толпа, и полицейские попросили хозяина лавки открыть её во время сиесты и подарить мальчику сладость.", |
||||
"materials": "Он добивался своего капризами и симуляцией, всегда стремился выделиться и привлечь к себе внимание.", |
||||
"age": 0, |
||||
"month_price": "500.00", |
||||
"day_discount": "0.00" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "school.schoolschedule", |
||||
"pk": 4, |
||||
"fields": { |
||||
"weekday": 4, |
||||
"title": "Моторика", |
||||
"description": "Многочисленные комплексы[какие?] и фобии, например, страх перед кузнечиками[9], мешали ему включиться в обычную школьную жизнь, завести с детьми обычные связи дружбы и симпатии.", |
||||
"materials": "Но, как и любой человек, испытывая сенсорный голод, он искал эмоциональный контакт с детьми любыми способами, стараясь вжиться в их коллектив если не в роли товарища, то в любой другой роли, а точнее той единственной, на которую был способен, — в роли эпатажного и непослушного ребёнка, странного, чудаковатого, всегда поступающего вопреки чужим мнениям.", |
||||
"age": 0, |
||||
"month_price": "500.00", |
||||
"day_discount": "0.00" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "school.schoolschedule", |
||||
"pk": 5, |
||||
"fields": { |
||||
"weekday": 5, |
||||
"title": "Акварель", |
||||
"description": "Проигрывая в школьных азартных играх, он вёл себя так, будто выиграл, и торжествовал. Иногда без причины затевал драки.", |
||||
"materials": "Одноклассники относились к «странному» ребёнку довольно нетерпимо, использовали его страх перед кузнечиками, подсовывали ему за шиворот этих насекомых, чем доводили Сальвадора до истерики, о чём он позднее поведал в своей книге «Тайная жизнь Сальвадора Дали, рассказанная им самим».", |
||||
"age": 0, |
||||
"month_price": "500.00", |
||||
"day_discount": "0.00" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "school.schoolschedule", |
||||
"pk": 6, |
||||
"fields": { |
||||
"weekday": 6, |
||||
"title": "Анимация", |
||||
"description": "Обучаться изобразительному искусству Дали начал в муниципальной художественной школе. С 1914 по 1918 год воспитывался в Академии братьев ордена маристов в Фигерасе.", |
||||
"materials": "Одним из друзей детства был будущий футболист ФК «Барселона» Хосеп Самитьер. В 1916 году, с семьей Рамона Пишó, отправился на каникулы в город Кадакéс, где познакомился с современным искусством.", |
||||
"age": 0, |
||||
"month_price": "500.00", |
||||
"day_discount": "0.00" |
||||
} |
||||
}, |
||||
{ |
||||
"model": "school.schoolschedule", |
||||
"pk": 7, |
||||
"fields": { |
||||
"weekday": 7, |
||||
"title": "Персонаж", |
||||
"description": "После прихода к власти Каудильо Фрáнко в 1936 году Дали ссорится с сюрреалистами, стоящими на левых позициях, и его исключают из группы.", |
||||
"materials": "В ответ Дали: «Сюрреализм — это я».", |
||||
"age": 0, |
||||
"month_price": "500.00", |
||||
"day_discount": "0.00" |
||||
} |
||||
} |
||||
] |
||||
@ -0,0 +1,25 @@ |
||||
import re |
||||
|
||||
from django import forms |
||||
from django.utils.translation import ugettext_lazy as _ |
||||
|
||||
CREDIT_CARD_RE = r'^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\d{11})$' |
||||
|
||||
|
||||
class CreditCardField(forms.CharField): |
||||
""" |
||||
Form field that validates credit card numbers. |
||||
""" |
||||
|
||||
default_error_messages = { |
||||
'required': _(u'Номер карты обязателен.'), |
||||
'invalid': _(u'Неверный номер карты.'), |
||||
} |
||||
|
||||
def clean(self, value): |
||||
value = value.replace(' ', '').replace('-', '') |
||||
if self.required and not value: |
||||
raise forms.utils.ValidationError(self.error_messages['required']) |
||||
if value and not re.match(CREDIT_CARD_RE, value): |
||||
raise forms.utils.ValidationError(self.error_messages['invalid']) |
||||
return value |
||||
@ -1,35 +1,35 @@ |
||||
[ |
||||
{ |
||||
"model": "user.user", |
||||
"pk": 1, |
||||
"fields": { |
||||
"password": "pbkdf2_sha256$100000$HoGxjmAQy4yo$3u+CrUiFtooddpg16OEUaSSjqUlwgFUBP1gt75hEoJs=", |
||||
"last_login": "2018-01-31T14:51:34Z", |
||||
"is_superuser": true, |
||||
"username": "admin@lil.city", |
||||
"first_name": "Lil", |
||||
"last_name": "City", |
||||
"is_staff": true, |
||||
"is_active": true, |
||||
"date_joined": "2018-01-28T08:41:19Z", |
||||
"email": "admin@lil.city", |
||||
"role": 2, |
||||
"gender": "n", |
||||
"country": "", |
||||
"city": "", |
||||
"about": "\u0417\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0430 \u041f\u0425\u0423 \u0438\u043c \u041a.\u0410.\u0421\u0430\u0432\u0438\u0446\u043a\u043e\u0433\u043e \u0445\u0443\u0434\u043e\u0436\u043d\u0438\u043a \u0442\u0435\u0430\u0442\u0440\u0430 \u0438 \u043a\u0438\u043d\u043e. \u0420\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0441 \u043a\u0440\u0443\u043f\u043d\u0435\u0439\u0448\u0438\u043c\u0438 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u043c\u0438 \u0438 \u0437\u0430\u0440\u0443\u0431\u0435\u0436\u043d\u044b\u043c\u0438 \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430\u043c\u0438. \u0423\u0447\u0430\u0441\u0442\u043d\u0438\u043a \u0438 \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c \u043c\u0435\u0436\u0434\u0443\u043d\u0430\u0440\u043e\u0434\u043d\u044b\u0445 \u0432\u044b\u0441\u0442\u0430\u0432\u043e\u043a. \u041e\u0441\u043d\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \"Lil City\".", |
||||
"instagram": null, |
||||
"facebook": null, |
||||
"twitter": null, |
||||
"pinterest": null, |
||||
"youtube": null, |
||||
"vkontakte": null, |
||||
"fb_id": null, |
||||
"fb_data": {}, |
||||
"is_email_proved": true, |
||||
"photo": "", |
||||
"groups": [], |
||||
"user_permissions": [] |
||||
} |
||||
{ |
||||
"model": "user.user", |
||||
"pk": 1, |
||||
"fields": { |
||||
"password": "pbkdf2_sha256$100000$HoGxjmAQy4yo$3u+CrUiFtooddpg16OEUaSSjqUlwgFUBP1gt75hEoJs=", |
||||
"last_login": "2018-01-31T14:51:34Z", |
||||
"is_superuser": true, |
||||
"username": "admin@lil.city", |
||||
"first_name": "Lil", |
||||
"last_name": "City", |
||||
"is_staff": true, |
||||
"is_active": true, |
||||
"date_joined": "2018-01-28T08:41:19Z", |
||||
"email": "admin@lil.city", |
||||
"role": 2, |
||||
"gender": "n", |
||||
"country": "", |
||||
"city": "", |
||||
"about": "Закончила ПХУ им К.А.Савицкого художник театра и кино. Работала с крупнейшими российскими и зарубежными издательствами. Участник и победитель международных выставок. Основатель компании \"Lil City\".", |
||||
"instagram": null, |
||||
"facebook": null, |
||||
"twitter": null, |
||||
"pinterest": null, |
||||
"youtube": null, |
||||
"vkontakte": null, |
||||
"fb_id": null, |
||||
"fb_data": {}, |
||||
"is_email_proved": true, |
||||
"photo": "", |
||||
"groups": [], |
||||
"user_permissions": [] |
||||
} |
||||
] |
||||
} |
||||
] |
||||
|
||||
@ -0,0 +1,16 @@ |
||||
from django.views.generic import TemplateView |
||||
|
||||
from apps.course.models import Course |
||||
from apps.school.models import SchoolSchedule |
||||
|
||||
|
||||
class IndexView(TemplateView): |
||||
template_name = 'templates/lilcity/main.html' |
||||
|
||||
def get_context_data(self): |
||||
context = super().get_context_data() |
||||
context.update({ |
||||
'course_items': Course.objects.filter(status=Course.PUBLISHED)[:3], |
||||
'school_schedules': SchoolSchedule.objects.all(), |
||||
}) |
||||
return context |
||||
Loading…
Reference in new issue