update: update construction:

main
= 3 years ago
parent 546d19f799
commit 4c3197f56c

2
.gitignore vendored

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

@ -31,6 +31,7 @@ ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'xxmweb.apps.account.apps.AccountConfig'
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
@ -73,14 +74,24 @@ WSGI_APPLICATION = 'xxmweb.wsgi.application'
# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': BASE_DIR / 'db.sqlite3',
# }
# }
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
'ENGINE': 'django.db.backends.mysql',
'NAME': 'xxm_oj',
'USER': 'root',
'PASSWORD': 'root',
'HOST': '127.0.0.1',
'PORT': '3306',
'DEFAULT-CHARACTER-SET': 'utf8',
}
}
# Password validation
# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators
@ -103,16 +114,16 @@ AUTH_PASSWORD_VALIDATORS = [
# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/
LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# USE_TZ = True
USE_TZ = False
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/