feature/fix_generate_pass
Andrey 8 years ago
parent 55d02c579a
commit 2e938e53e7
  1. 4
      access/admin.py
  2. 24
      access/load_users.py
  3. 29
      access/migrations/0014_auto_20171017_1450.py
  4. 51
      access/migrations/0015_auto_20171017_1514.py
  5. 33
      access/models.py
  6. 1
      access/views.py
  7. 8
      courses/models.py
  8. 10
      courses/views.py

@ -1,8 +1,8 @@
from django.contrib import admin
from access.models import ActiveObject, ExtraPrivilege, User, Account, Invite
from access.models import Progress, ExtraPrivilege, User, Account, Invite
admin.site.register(User)
admin.site.register(Account)
admin.site.register(ExtraPrivilege)
admin.site.register(ActiveObject)
admin.site.register(Progress)
admin.site.register(Invite)

@ -5,6 +5,7 @@ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup()
from django.contrib.auth import get_user_model
from access.models import Account
if __name__ == '__main__':
with open('../csv/access/users.csv') as user_csv:
@ -12,11 +13,28 @@ if __name__ == '__main__':
for row in user_reader:
try:
row = dict(row)
print(row['role_list'])
row['role_list'] = json.loads(row['role_list'])
try:
row['role_list'] = [row['role_list'].split("\'")[1]]
except IndexError:
row['role_list'] = []
get_user_model().objects.get_or_create(**row)
except ValueError as e:
if e == 'The given email must be set':
if str(e) == 'The given email must be set':
print(e)
else:
raise e
with open('../csv/access/account.csv') as account_csv:
account_reader = csv.DictReader(account_csv)
for row in account_reader:
row = dict(row)
try:
acc = Account.objects.get(owner=get_user_model().objects.get(id=row['owner']))
acc.phone = row['phone'] if row['phone'] and len(row['phone']) < 16 else None
acc.city = row['city'] if row['city'] else None
acc.photo = row['photo']
acc.d_day = row['d_day'] if row['d_day'] else None
acc.save()
except (Account.DoesNotExist, get_user_model().DoesNotExist):
pass

@ -0,0 +1,29 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2017-10-17 14:50
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('access', '0013_auto_20171017_0933'),
]
operations = [
migrations.RenameModel(
old_name='ActiveObject',
new_name='Progress',
),
migrations.AlterField(
model_name='account',
name='gender',
field=models.SmallIntegerField(choices=[(1, 'male'), (2, 'female'), (0, 'undefined')], default=0),
),
migrations.AlterField(
model_name='invite',
name='hash',
field=models.CharField(default='lQNTPwtkiSKGcAk', max_length=15),
),
]

@ -0,0 +1,51 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2017-10-17 15:14
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('access', '0014_auto_20171017_1450'),
]
operations = [
migrations.AlterModelOptions(
name='account',
options={'verbose_name': 'Дополнительная информация о пользователе', 'verbose_name_plural': 'Дополнительная информация о пользователе'},
),
migrations.AlterModelOptions(
name='extraprivilege',
options={'verbose_name': 'Доп право', 'verbose_name_plural': 'Доп права пользователя'},
),
migrations.AlterModelOptions(
name='invite',
options={'verbose_name': 'Приглошение в систему', 'verbose_name_plural': 'Приглошения в систему'},
),
migrations.AlterModelOptions(
name='progress',
options={'verbose_name': 'Прогресс пользователя', 'verbose_name_plural': 'Прогресс пользователя'},
),
migrations.AlterField(
model_name='account',
name='city',
field=models.CharField(blank=True, max_length=63, null=True),
),
migrations.AlterField(
model_name='account',
name='gender',
field=models.SmallIntegerField(choices=[(2, 'female'), (1, 'male'), (0, 'undefined')], default=0),
),
migrations.AlterField(
model_name='account',
name='phone',
field=models.CharField(blank=True, max_length=15, null=True),
),
migrations.AlterField(
model_name='invite',
name='hash',
field=models.CharField(default='EwxzlFyTLohcDNa', max_length=15),
),
]

@ -1,12 +1,11 @@
# encoding=utf-8
import random
import string
import json
from courses.models import Vertex, Course
from storage.models import Storage
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
from django.contrib.auth.models import PermissionsMixin
from django.contrib.auth.models import PermissionsMixin, Group
from django.db import models
@ -14,7 +13,6 @@ from django.conf import settings
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from lms.global_decorators import transaction_decorator
from django.contrib.auth.models import Group
class Invite(models.Model):
@ -24,6 +22,10 @@ class Invite(models.Model):
)
date = models.DateTimeField(null=True, blank=True)
class Meta:
verbose_name = 'Приглошение в систему'
verbose_name_plural = 'Приглошения в систему'
class Account(models.Model):
GENDER_CHOICES = {
@ -32,22 +34,27 @@ class Account(models.Model):
(2, 'female'),
}
b_day = models.DateField(blank=True, null=True)
city = models.CharField(max_length=63, null=True)
city = models.CharField(max_length=63, null=True, blank=True)
gender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0)
owner = models.OneToOneField(to=settings.AUTH_USER_MODEL)
photo = models.ImageField(null=True, blank=True, default='user/photo/default_avatar.png', upload_to='user/photo/')
phone = models.CharField(max_length=15, blank=True)
phone = models.CharField(max_length=15, null=True, blank=True)
def __str__(self):
return self.owner.email
class Meta:
verbose_name = 'Дополнительная информация о пользователе'
verbose_name_plural = 'Дополнительная информация о пользователе'
class CustomUserManager(BaseUserManager):
use_in_migrations = True
def get_or_create(self, email=None, password=None, **kwargs):
if not email:
raise ValueError('email not set')
raise ValueError('The given email must be set')
if password:
kwargs["hash_password"] = password
@ -90,7 +97,7 @@ class CustomUserManager(BaseUserManager):
if role_list:
for group in role_list:
user.groups.add(group)
user.groups.add(Group.objects.get(name=group))
if is_send:
pass
@ -142,7 +149,7 @@ class User(AbstractBaseUser, PermissionsMixin):
verbose_name_plural = _('users')
class ActiveObject(models.Model):
class Progress(models.Model):
user = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Студент')
course = models.ForeignKey(to=Course, verbose_name=u'Курс')
active_obj = models.ForeignKey(to=Vertex, verbose_name=u'Активный объект', blank=True, null=True)
@ -158,8 +165,16 @@ class ActiveObject(models.Model):
def is_access(self, vertex):
return not vertex.is_more(self.active_obj)
class Meta:
verbose_name = 'Прогресс пользователя'
verbose_name_plural = 'Прогресс пользователя'
class ExtraPrivilege(models.Model):
user = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Правообладатель')
is_done = models.BooleanField(default=False, verbose_name=u'Выполнено?')
subject = models.ForeignKey(to=Vertex, verbose_name=u'Объект')
subject = models.ForeignKey(to=Vertex, verbose_name=u'Объект')
class Meta:
verbose_name = 'Доп право'
verbose_name_plural = 'Доп права пользователя'

@ -5,7 +5,6 @@ from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response
from access.serializers import UserInitSerializer
from courses.models import Course
class TeacherListView(APIView):

@ -34,7 +34,6 @@ class Course(models.Model):
hidden = models.BooleanField(verbose_name=u'Видно только оплатившим', default=False)
level = models.CharField(verbose_name=u'Уровень', choices=COURSE_LEVEL, default='B', max_length=3)
slug = models.SlugField(max_length=255, editable=False, blank=True, default='', unique=True)
icon = models.ImageField(verbose_name=u'Иконка курса', blank=True, null=True, upload_to='course')
direction = models.ForeignKey(MaterialDirection, verbose_name=u'Направление', null=True)
mentors = models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name=u'Кураторы', blank=True,
related_name='course_mentors')
@ -45,15 +44,8 @@ class Course(models.Model):
big_image = models.ImageField(verbose_name=u'Большое изображение', upload_to='course', blank=True)
big_mobile_image = models.ImageField(verbose_name=u'Под мобилку', upload_to='course', blank=True, null=True,
help_text=u'Большая картинка для мобильной версии')
preview = models.CharField(verbose_name=u'Трэйл', blank=True, default='', max_length=255)
teachers = models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name=u'Преподаватели',
related_name='course_teachers')
sort = models.IntegerField(verbose_name=u'Порядок сортировки', default=0)
min_price = models.IntegerField(verbose_name=u'Цена от', default=0)
buy_icon = models.ImageField(verbose_name=u'Картинка покупки', upload_to='course', blank=True, null=True)
keywords = models.ManyToManyField(Tags, verbose_name=u'Ключевые слова', blank=True)
recommend = models.ManyToManyField('self', verbose_name=u'Связанные курсы', blank=True,
help_text=u'Курсы, которые стоит порекомендовать вместе с этим')
def __str__(self):
return self.title

@ -4,7 +4,7 @@ from rest_framework.response import Response
from access.serializers import ExtraPrivilegeSerializer
from courses.models import Course, MaterialDirection, Vertex
from access.models import ActiveObject, ExtraPrivilege
from access.models import Progress, ExtraPrivilege
from courses.serializers import CourseDetailSerializer, CourseListSerializer, VertexSerializer, CourseTreeSerializer
from finance.models import Bill
@ -34,8 +34,8 @@ class TreeView(APIView):
res = CourseTreeSerializer(course).data
try:
res['active_id'] = ActiveObject.objects.get(course=course, user=request.user).active_obj.id
except ActiveObject.DoesNotExist:
res['active_id'] = Progress.objects.get(course=course, user=request.user).active_obj.id
except Progress.DoesNotExist:
res['active_id'] = False
res['extra_privilege'] = [
@ -105,10 +105,10 @@ class VertexDetail(APIView):
return res_a
try:
if not ActiveObject.objects.get(course=vertex.course, user=request.user).is_access(vertex):
if not Progress.objects.get(course=vertex.course, user=request.user).is_access(vertex):
return Response("permission denied", status=403)
except ActiveObject.DoesNotExist:
except Progress.DoesNotExist:
return Response("permission denied", status=403)
return res_a

Loading…
Cancel
Save