parent
546d19f799
commit
4c3197f56c
@ -0,0 +1,2 @@
|
||||
venv
|
||||
.idea
|
||||
@ -0,0 +1 @@
|
||||
Django==3.2.18
|
||||
@ -1 +0,0 @@
|
||||
Django==3.2.18
|
||||
@ -0,0 +1,3 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
@ -0,0 +1,7 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
|
||||
class AccountConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'account'
|
||||
@ -0,0 +1,81 @@
|
||||
from django.contrib.auth.base_user import AbstractBaseUser
|
||||
from django.db import models
|
||||
|
||||
|
||||
# Create your models here.
|
||||
class AccountType(object):
|
||||
REGULAR_USER = "Regular User"
|
||||
TEACHER = "Teacher"
|
||||
ADMIN = "Admin"
|
||||
SUPER_ADMIN = "Super Admin"
|
||||
|
||||
|
||||
class Account(models.Model):
|
||||
# id = models.CharField(primary_key=True)
|
||||
username = models.TextField(unique=True)
|
||||
real_name = models.TextField()
|
||||
password = models.CharField(null=False)
|
||||
email = models.EmailField(null=True)
|
||||
create_time = models.DateTimeField(auto_now_add=True, null=True)
|
||||
gender = models.TextField()
|
||||
# One of UserType
|
||||
account_type = models.TextField(default=AccountType.REGULAR_USER)
|
||||
is_active = models.BooleanField(default=True)
|
||||
avatar = models.TextField()
|
||||
signature = models.TextField()
|
||||
|
||||
def is_role(self):
|
||||
return self.account_type
|
||||
|
||||
def is_admin(self):
|
||||
return self.account_type == AccountType.ADMIN
|
||||
|
||||
def is_super_admin(self):
|
||||
return self.account_type == AccountType.SUPER_ADMIN
|
||||
|
||||
def is_admin_role(self):
|
||||
return self.account_type in [AccountType.ADMIN, AccountType.SUPER_ADMIN]
|
||||
|
||||
|
||||
class AccountProfile(Account):
|
||||
blog = models.URLField(null=True)
|
||||
mood = models.TextField(null=True)
|
||||
github = models.TextField(null=True)
|
||||
school = models.TextField(null=True)
|
||||
major = models.TextField(null=True)
|
||||
language = models.TextField(null=True)
|
||||
# for acm
|
||||
accepted_number = models.IntegerField(default=0)
|
||||
# for OI
|
||||
total_score = models.BigIntegerField(default=0)
|
||||
submission_number = models.IntegerField(default=0)
|
||||
|
||||
def add_accepted_problem_number(self):
|
||||
self.accepted_number = models.F("accepted_number") + 1
|
||||
self.save()
|
||||
|
||||
def add_submission_number(self):
|
||||
self.submission_number = models.F("submission_number") + 1
|
||||
self.save()
|
||||
|
||||
# 计算总分时, 应先减掉上次该题所得分数, 然后再加上本次所得分数
|
||||
def add_score(self, this_time_score, last_time_score=None):
|
||||
last_time_score = last_time_score or 0
|
||||
self.total_score = models.F("total_score") - last_time_score + this_time_score
|
||||
self.save()
|
||||
|
||||
class Meta:
|
||||
db_table = "user_profile"
|
||||
|
||||
|
||||
class Teacher(Account):
|
||||
account_type = models.TextField(default=AccountType.TEACHER)
|
||||
|
||||
def is_teacher(self):
|
||||
return self.account_type == AccountType.TEACHER
|
||||
|
||||
class Student(Account):
|
||||
account_type = models.TextField(default=AccountType.TEACHER)
|
||||
|
||||
def is_teacher(self):
|
||||
return self.account_type == AccountType.TEACHER
|
||||
@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
@ -0,0 +1,3 @@
|
||||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
||||
@ -0,0 +1,3 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class CourseConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'course'
|
||||
@ -0,0 +1,86 @@
|
||||
from enum import Enum
|
||||
|
||||
from django.db import models
|
||||
from xxmweb.apps.account.models import Teacher, Student
|
||||
|
||||
|
||||
# Create your models here.
|
||||
|
||||
class HardType(str, Enum):
|
||||
EASY = '入门'
|
||||
BASE = '基础'
|
||||
MEDIUM = '提高'
|
||||
HARD = '进阶'
|
||||
Course_HardType_Choices = [
|
||||
('EASY', EASY),
|
||||
('BASE', BASE),
|
||||
('MEDIUM', MEDIUM),
|
||||
('HARD', HARD)
|
||||
]
|
||||
|
||||
|
||||
class Category(models.Model):
|
||||
id = models.CharField(primary_key=True, auto_created=True)
|
||||
|
||||
|
||||
class Course(models.Model):
|
||||
id = models.CharField(primary_key=True, auto_created=True)
|
||||
title = models.CharField(max_length=255, null=False, verbose_name="课程标题")
|
||||
introduction = models.CharField(
|
||||
max_length=255, default="", verbose_name="课程介绍")
|
||||
img = models.ImageField(upload_to="Lesson_img", verbose_name="课程图片")
|
||||
banner = models.ImageField(upload_to="Lesson_banner", verbose_name="课程Banner")
|
||||
price = models.IntegerField(default=0, verbose_name="课程价格")
|
||||
is_discount = models.BooleanField(verbose_name="是否打折")
|
||||
discount_Price = models.IntegerField(default=0, verbose_name="打折后价格")
|
||||
create_time = models.DateTimeField(
|
||||
auto_now=True, max_length=255, verbose_name="课程创建时间")
|
||||
persons = models.IntegerField(default=0, verbose_name="学习人数")
|
||||
hard = models.CharField(choices=HardType.Course_HardType_Choices)
|
||||
|
||||
# 课程分类
|
||||
category = models.ForeignKey(Category, on_delete=models.DO_NOTHING, verbose_name="课程分类", default="",
|
||||
blank=True, db_constraint=False)
|
||||
|
||||
# 课程老师
|
||||
teacher = models.OneToOneField(Teacher, on_delete=models.DO_NOTHING, verbose_name="课程讲师", default="",
|
||||
blank=True, db_constraint=False)
|
||||
|
||||
# 参加学生
|
||||
student = models.ManyToManyField(Student,db_constraint=False,blank=True,)
|
||||
class Meta:
|
||||
verbose_name = '课程'
|
||||
verbose_name_plural = verbose_name
|
||||
|
||||
class Chapter(models.Model):
|
||||
id = models.CharField(primary_key=True, auto_created=True)
|
||||
title = models.CharField(max_length=255, null=False, verbose_name="课程标题")
|
||||
introduction = models.CharField(
|
||||
max_length=255, default="", verbose_name="课程介绍")
|
||||
course = models.ForeignKey(Course,on_delete=models.DO_NOTHING,verbose_name="章节")
|
||||
|
||||
class Catalog(models.Model):
|
||||
lessonid = models.CharField(max_length=255, verbose_name="课程id")
|
||||
introduction = models.CharField(
|
||||
max_length=255, default="", verbose_name="课程介绍")
|
||||
isComplete = models.BooleanField(verbose_name="是否完结")
|
||||
|
||||
class Meta:
|
||||
verbose_name = '课程目录信息'
|
||||
verbose_name_plural = verbose_name
|
||||
|
||||
|
||||
class Lesson(models.Model):
|
||||
title = models.CharField(max_length=255, verbose_name="课程标题", unique=True)
|
||||
introduction = models.CharField(
|
||||
max_length=255, default="", verbose_name="课程介绍")
|
||||
img = models.ImageField(upload_to="Lesson_img",
|
||||
max_length=255, verbose_name="课程图片")
|
||||
create_time = models.DateTimeField(
|
||||
auto_now=True, max_length=255, verbose_name="课程添加时间")
|
||||
click_count = models.IntegerField(default=0, verbose_name="学习人数")
|
||||
# comments = models.IntegerField(default=0, verbose_name="评论数")
|
||||
# video = models.OneToOneField()
|
||||
class Meta:
|
||||
verbose_name = '课程'
|
||||
verbose_name_plural = verbose_name
|
||||
@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
@ -0,0 +1,3 @@
|
||||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
||||
Reference in new issue