bfzgs 1 năm trước cách đây
commit
bc6efd762c

+ 0 - 0
.gitignore


+ 8 - 0
.idea/.gitignore

@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml

+ 30 - 0
.idea/LearnPython02_SGG.iml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="PYTHON_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="django" name="Django">
+      <configuration>
+        <option name="rootFolder" value="$MODULE_DIR$" />
+        <option name="settingsModule" value="LearnPython02_SGG/settings.py" />
+        <option name="manageScript" value="$MODULE_DIR$/manage.py" />
+        <option name="environment" value="&lt;map/&gt;" />
+        <option name="doNotUseTestRunner" value="false" />
+        <option name="trackFilePattern" value="migrations" />
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/apps" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+  <component name="TemplatesService">
+    <option name="TEMPLATE_CONFIGURATION" value="Django" />
+    <option name="TEMPLATE_FOLDERS">
+      <list>
+        <option value="$MODULE_DIR$/../LearnPython02_SGG\templates" />
+      </list>
+    </option>
+  </component>
+</module>

+ 6 - 0
.idea/inspectionProfiles/profiles_settings.xml

@@ -0,0 +1,6 @@
+<component name="InspectionProjectProfileManager">
+  <settings>
+    <option name="USE_PROJECT_PROFILE" value="false" />
+    <version value="1.0" />
+  </settings>
+</component>

+ 4 - 0
.idea/misc.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectRootManager" version="2" project-jdk-name="C:\Program\Anaconda3\envs\novelai" project-jdk-type="Python SDK" />
+</project>

+ 8 - 0
.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/LearnPython02_SGG.iml" filepath="$PROJECT_DIR$/.idea/LearnPython02_SGG.iml" />
+    </modules>
+  </component>
+</project>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>

+ 0 - 0
LearnPython02_SGG/__init__.py


+ 16 - 0
LearnPython02_SGG/asgi.py

@@ -0,0 +1,16 @@
+"""
+ASGI config for LearnPython02_SGG project.
+
+It exposes the ASGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/4.1/howto/deployment/asgi/
+"""
+
+import os
+
+from django.core.asgi import get_asgi_application
+
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "LearnPython02_SGG.settings")
+
+application = get_asgi_application()

+ 138 - 0
LearnPython02_SGG/settings.py

@@ -0,0 +1,138 @@
+"""
+Django settings for LearnPython02_SGG project.
+
+Generated by 'django-admin startproject' using Django 4.1.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/4.1/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/4.1/ref/settings/
+"""
+import os
+import sys
+from pathlib import Path
+
+# Build paths inside the project like this: BASE_DIR / 'subdir'.
+BASE_DIR = Path(__file__).resolve().parent.parent
+sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/
+
+# SECURITY WARNING: keep the secret key used in production secret!
+SECRET_KEY = "django-insecure-*-ejv$ss&p4$vkj3&dbsmls2a!q1(_2me1xe*v$i8fh%!4@-n)"
+
+# SECURITY WARNING: don't run with debug turned on in production!
+DEBUG = True
+
+ALLOWED_HOSTS = []
+
+# Application definition
+
+INSTALLED_APPS = [
+    "django.contrib.admin",
+    "django.contrib.auth",
+    "django.contrib.contenttypes",
+    "django.contrib.sessions",
+    "django.contrib.messages",
+    "django.contrib.staticfiles",
+    'user.apps.UserConfig',
+    'course.apps.CourseConfig',
+    'org.apps.OrgConfig',
+    'operation.apps.OperationConfig',
+]
+
+MIDDLEWARE = [
+    "django.middleware.security.SecurityMiddleware",
+    "django.contrib.sessions.middleware.SessionMiddleware",
+    "django.middleware.common.CommonMiddleware",
+    "django.middleware.csrf.CsrfViewMiddleware",
+    "django.contrib.auth.middleware.AuthenticationMiddleware",
+    "django.contrib.messages.middleware.MessageMiddleware",
+    "django.middleware.clickjacking.XFrameOptionsMiddleware",
+]
+
+ROOT_URLCONF = "LearnPython02_SGG.urls"
+
+TEMPLATES = [
+    {
+        "BACKEND": "django.template.backends.django.DjangoTemplates",
+        "DIRS": [BASE_DIR / 'templates']
+        ,
+        "APP_DIRS": True,
+        "OPTIONS": {
+            "context_processors": [
+                "django.template.context_processors.debug",
+                "django.template.context_processors.media",
+                "django.template.context_processors.request",
+                "django.contrib.auth.context_processors.auth",
+                "django.contrib.messages.context_processors.messages",
+            ],
+        },
+    },
+]
+
+WSGI_APPLICATION = "LearnPython02_SGG.wsgi.application"
+
+# Database
+# https://docs.djangoproject.com/en/4.1/ref/settings/#databases
+
+DATABASES = {
+    "default": {
+        "ENGINE": "django.db.backends.mysql",
+        "NAME": "py_sgg",
+        "USER": "root",
+        "PASSWORD": "Cjy011007",
+        "HOST": "47.94.15.64",
+        "PORT": "3306",
+    }
+}
+
+# Password validation
+# https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators
+
+AUTH_PASSWORD_VALIDATORS = [
+    {
+        "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
+    },
+    {
+        "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
+    },
+    {
+        "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",
+    },
+    {
+        "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
+    },
+]
+
+# Internationalization
+# https://docs.djangoproject.com/en/4.1/topics/i18n/
+
+LANGUAGE_CODE = "zh-hans"
+
+TIME_ZONE = "Asia/Shanghai"
+
+USE_I18N = True
+
+USE_L10N = True
+
+USE_TZ = False
+
+# Static files (CSS, JavaScript, Images)
+# https://docs.djangoproject.com/en/4.1/howto/static-files/
+
+STATIC_URL = "static/"
+
+STATICFILES_DIRS = [
+    os.path.join(BASE_DIR, 'static')
+]
+
+MEDIA_URL = '/static/media/'
+MEDIA_ROOT = os.path.join(BASE_DIR, 'static/media')
+
+# Default primary key field type
+# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field
+
+DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"

+ 25 - 0
LearnPython02_SGG/urls.py

@@ -0,0 +1,25 @@
+"""LearnPython02_SGG URL Configuration
+
+The `urlpatterns` list routes URLs to views. For more information please see:
+    https://docs.djangoproject.com/en/4.1/topics/http/urls/
+Examples:
+Function views
+    1. Add an import:  from my_app import views
+    2. Add a URL to urlpatterns:  path('', views.home, name='home')
+Class-based views
+    1. Add an import:  from other_app.views import Home
+    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
+Including another URLconf
+    1. Import the include() function: from django.urls import include, path
+    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
+"""
+from django.contrib import admin
+from django.urls import path, include
+
+urlpatterns = [
+    path("admin/", admin.site.urls),
+    path('^user/', include('user.urls', namespace='user')),
+    path('^course/', include('course.urls', namespace='course')),
+    path('^org/', include('org.urls', namespace='org')),
+    path('^operation/', include('operation.urls', namespace='operation')),
+]

+ 16 - 0
LearnPython02_SGG/wsgi.py

@@ -0,0 +1,16 @@
+"""
+WSGI config for LearnPython02_SGG project.
+
+It exposes the WSGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/4.1/howto/deployment/wsgi/
+"""
+
+import os
+
+from django.core.wsgi import get_wsgi_application
+
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "LearnPython02_SGG.settings")
+
+application = get_wsgi_application()

+ 0 - 0
apps/__init__.py


+ 0 - 0
apps/course/__init__.py


+ 3 - 0
apps/course/admin.py

@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.

+ 6 - 0
apps/course/apps.py

@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class CourseConfig(AppConfig):
+    default_auto_field = "django.db.models.BigAutoField"
+    name = "course"

+ 0 - 0
apps/course/migrations/__init__.py


+ 76 - 0
apps/course/models.py

@@ -0,0 +1,76 @@
+from datetime import datetime
+
+from django.db import models
+
+from org.models import OrgInfo, TeacherInfo
+
+
+# Create your models here.
+class CourseInfo(models.Model):
+    image = models.ImageField(upload_to='course/', max_length=200, verbose_name="课程封面")
+    name = models.CharField(max_length=20, verbose_name="课程名称")
+    study_time = models.IntegerField(default=0, verbose_name="学习时长")
+    study_num = models.IntegerField(default=0, verbose_name="学习人数")
+    level = models.CharField(choices=(('gj', '高级'), ('zj', '中级'), ('cj', '初级')), max_length=5,
+                             verbose_name="课程 难度", default='cj')
+    love_num = models.IntegerField(default=0, verbose_name="收藏数")
+    click_num = models.IntegerField(default=0, verbose_name="访问量")
+    desc = models.CharField(max_length=200, verbose_name="课程简介")
+    detail = models.TextField(verbose_name="课程详情")
+    category = models.CharField(choices=(('qd', '前端开发'), ('hd', '后端开发')), verbose_name="课程类别", max_length=5)
+    course_notice = models.CharField(max_length=200, verbose_name="课程公告")
+    course_need = models.CharField(max_length=100, verbose_name="课程须知")
+    teacher_tell = models.CharField(max_length=100, verbose_name="老师教导")
+    orginfo = models.ForeignKey(OrgInfo, verbose_name="所属机构")
+    teacherinfo = models.ForeignKey(TeacherInfo, verbose_name="所属讲师")
+    is_banner = models.BooleanField(default=False, verbose_name="是否轮播")
+    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")
+
+    def __str__(self):
+        return self.name
+
+    class Meta:
+        verbose_name = '课程信息'
+        verbose_name_plural = verbose_name
+
+
+class LessonInfo(models.Model):
+    name = models.CharField(max_length=50, verbose_name="章节名称")
+    courseinfo = models.ForeignKey(CourseInfo, verbose_name="所属课程")
+    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")
+
+    def __str__(self):
+        return self.name
+
+    class Meta:
+        verbose_name = '章节信息'
+        verbose_name_plural = verbose_name
+
+
+class VideoInfo(models.Model):
+    name = models.CharField(max_length=50, verbose_name="视频名称")
+    study_time = models.IntegerField(default=0, verbose_name="视频时长")
+    url = models.URLField(default='http://www.atguigu.com', verbose_name="视频链接", max_length=200)
+    lessoninfo = models.ForeignKey(LessonInfo, verbose_name="所属章节")
+    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")
+
+    def __str__(self):
+        return self.name
+
+    class Meta:
+        verbose_name = '视频信息'
+        verbose_name_plural = verbose_name
+
+
+class SourceInfo(models.Model):
+    name = models.CharField(max_length=50, verbose_name="资源名称")
+    down_load = models.FileField(upload_to='source/', max_length=200, verbose_name="下载路径")
+    courseinfo = models.ForeignKey(CourseInfo, verbose_name="所属课程")
+    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")
+
+    def __str__(self):
+        return self.name
+
+    class Meta:
+        verbose_name = '资源信息'
+        verbose_name_plural = verbose_name

+ 3 - 0
apps/course/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 25 - 0
apps/course/urls.py

@@ -0,0 +1,25 @@
+"""LearnPython02_SGG URL Configuration
+
+The `urlpatterns` list routes URLs to views. For more information please see:
+    https://docs.djangoproject.com/en/4.1/topics/http/urls/
+Examples:
+Function views
+    1. Add an import:  from my_app import views
+    2. Add a URL to urlpatterns:  path('', views.home, name='home')
+Class-based views
+    1. Add an import:  from other_app.views import Home
+    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
+Including another URLconf
+    1. Import the include() function: from django.urls import include, path
+    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
+"""
+from django.contrib import admin
+from django.urls import path, include
+
+urlpatterns = [
+    path("admin/", admin.site.urls),
+    path('^user/',include('user.urls',namespace='user')),
+    path('^course/',include('course.urls',namespace='course')),
+    path('^org/',include('org.urls',namespace='org')),
+    path('^operation/',include('operation.urls',namespace='operation')),
+]

+ 3 - 0
apps/course/views.py

@@ -0,0 +1,3 @@
+from django.shortcuts import render
+
+# Create your views here.

+ 0 - 0
apps/operation/__init__.py


+ 3 - 0
apps/operation/admin.py

@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.

+ 6 - 0
apps/operation/apps.py

@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class OperationConfig(AppConfig):
+    default_auto_field = "django.db.models.BigAutoField"
+    name = "operation"

+ 0 - 0
apps/operation/migrations/__init__.py


+ 78 - 0
apps/operation/models.py

@@ -0,0 +1,78 @@
+from datetime import datetime
+
+from django.db import models
+
+from course.models import CourseInfo
+from user.models import UserProfile
+
+
+# Create your models here.
+class UserAsk(models.Model):
+    name = models.CharField(max_length=30, verbose_name="姓名")
+    phone = models.CharField(max_length=11, verbose_name="手机")
+    course = models.CharField(max_length=20, verbose_name="课程")
+    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")
+
+    def __str__(self):
+        return self.name
+
+    class Meta:
+        verbose_name = '咨询信息'
+        verbose_name_plural = verbose_name
+
+
+class UserLove(models.Model):
+    love_man = models.ForeignKey(UserProfile, verbose_name="收藏用户")
+    love_id = models.IntegerField(verbose_name="收藏id")
+    love_type = models.IntegerField(choices=((1, '机构'), (2, '课程'), (3, '讲师')), verbose_name="收藏类别")
+    love_status = models.BooleanField(default=False, verbose_name="收藏状态")
+    add_time = models.DateTimeField(default=datetime.now, verbose_name="收藏时间")
+
+    def __str__(self):
+        return self.love_man.username
+
+    class Meta:
+        verbose_name = '收藏信息'
+        verbose_name_plural = verbose_name
+
+
+class UserCourse(models.Model):
+    study_man = models.ForeignKey(UserProfile, verbose_name="学习用户")
+    study_course = models.ForeignKey(CourseInfo, verbose_name="学习课程")
+    add_time = models.DateTimeField(default=datetime.now, verbose_name="学习时间")
+
+    def __str__(self):
+        return self.study_man.username
+
+    class Meta:
+        unique_together = ('study_man', 'study_course')
+        verbose_name = '用户学习课程信息'
+        verbose_name_plural = verbose_name
+
+
+class UserComment(models.Model):
+    comment_man = models.ForeignKey(UserProfile, verbose_name="评论用户")
+    comment_course = models.ForeignKey(CourseInfo, verbose_name="评论课程")
+    comment_content = models.CharField(max_length=300, verbose_name="评论内容")
+    add_time = models.DateTimeField(default=datetime.now, verbose_name="评论时间")
+
+    def __str__(self):
+        return self.comment_content
+
+    class Meta:
+        verbose_name = '用户评论课程信息'
+        verbose_name_plural = verbose_name
+
+
+class UserMessage(models.Model):
+    message_man = models.IntegerField(default=0, verbose_name="消息用户")
+    message_content = models.CharField(max_length=200, verbose_name="消息内容")
+    message_status = models.BooleanField(default=False, verbose_name="消息状态")
+    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")
+
+    def __str__(self):
+        return self.message_content
+
+    class Meta:
+        verbose_name = '用户消息信息'
+        verbose_name_plural = verbose_name

+ 3 - 0
apps/operation/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 25 - 0
apps/operation/urls.py

@@ -0,0 +1,25 @@
+"""LearnPython02_SGG URL Configuration
+
+The `urlpatterns` list routes URLs to views. For more information please see:
+    https://docs.djangoproject.com/en/4.1/topics/http/urls/
+Examples:
+Function views
+    1. Add an import:  from my_app import views
+    2. Add a URL to urlpatterns:  path('', views.home, name='home')
+Class-based views
+    1. Add an import:  from other_app.views import Home
+    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
+Including another URLconf
+    1. Import the include() function: from django.urls import include, path
+    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
+"""
+from django.contrib import admin
+from django.urls import path, include
+
+urlpatterns = [
+    path("admin/", admin.site.urls),
+    path('^user/',include('user.urls',namespace='user')),
+    path('^course/',include('course.urls',namespace='course')),
+    path('^org/',include('org.urls',namespace='org')),
+    path('^operation/',include('operation.urls',namespace='operation')),
+]

+ 3 - 0
apps/operation/views.py

@@ -0,0 +1,3 @@
+from django.shortcuts import render
+
+# Create your views here.

+ 0 - 0
apps/org/__init__.py


+ 3 - 0
apps/org/admin.py

@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.

+ 6 - 0
apps/org/apps.py

@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class OrgConfig(AppConfig):
+    default_auto_field = "django.db.models.BigAutoField"
+    name = "org"

+ 0 - 0
apps/org/migrations/__init__.py


+ 70 - 0
apps/org/models.py

@@ -0,0 +1,70 @@
+from datetime import datetime
+
+from DjangoUeditor.models import UEditorField
+from django.db import models
+
+
+# Create your models here.
+class CityInfo(models.Model):
+    name = models.CharField(max_length=20, verbose_name="城市名称")
+    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")
+
+    def __str__(self):
+        return self.name
+
+    class Meta:
+        verbose_name = '城市信息'
+        verbose_name_plural = verbose_name
+
+
+class OrgInfo(models.Model):
+    image = models.ImageField(upload_to='org/', max_length=200, verbose_name="机构封面")
+    name = models.CharField(max_length=20, verbose_name="机构名称")
+    course_num = models.IntegerField(default=0, verbose_name="课程数")
+    study_num = models.IntegerField(default=0, verbose_name="学习人数")
+    address = models.CharField(max_length=200, verbose_name="机构地址")
+    desc = models.CharField(max_length=200, verbose_name="机构简介")
+    detail = UEditorField(verbose_name='机构详情',
+                          width=700,
+                          height=400,
+                          toolbars='full',
+                          imagePath='ueditor/images/',
+                          filePath='ueditor/files/',
+                          upload_settings={'imageMaxSizing': 1024000},
+                          default='')
+
+    love_num = models.IntegerField(default=0, verbose_name="收藏数")
+    click_num = models.IntegerField(default=0, verbose_name="访问量")
+    category = models.CharField(choices=(('pxjg', '培训机构'), ('gx', '高校'), ('gr', '个人')), max_length=10,
+                                verbose_name="机构类别")
+    cityinfo = models.ForeignKey(CityInfo, verbose_name="所在城市")
+    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")
+
+    def __str__(self):
+        return self.name
+
+    class Meta:
+        verbose_name = '机构信息'
+        verbose_name_plural = verbose_name
+
+
+class TeacherInfo(models.Model):
+    image = models.ImageField(upload_to='teacher/', max_length=200, verbose_name="讲师头像")
+    name = models.CharField(max_length=20, verbose_name="讲师姓名")
+    work_year = models.IntegerField(default=3, verbose_name="工作年限")
+    work_position = models.CharField(max_length=20, verbose_name="工作职位")
+    work_style = models.CharField(max_length=20, verbose_name="教学特点")
+    work_company = models.ForeignKey(OrgInfo, verbose_name="所属机构")
+    age = models.IntegerField(default=30, verbose_name="讲师年龄")
+    gender = models.CharField(choices=(('boy', '男'), ('girl', '女')), max_length=10, verbose_name="讲师性别",
+                              default='boy')
+    love_num = models.IntegerField(default=0, verbose_name="收藏数")
+    click_num = models.IntegerField(default=0, verbose_name="访问量")
+    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")
+
+    def __str__(self):
+        return self.name
+
+    class Meta:
+        verbose_name = '讲师信息'
+        verbose_name_plural = verbose_name

+ 3 - 0
apps/org/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 25 - 0
apps/org/urls.py

@@ -0,0 +1,25 @@
+"""LearnPython02_SGG URL Configuration
+
+The `urlpatterns` list routes URLs to views. For more information please see:
+    https://docs.djangoproject.com/en/4.1/topics/http/urls/
+Examples:
+Function views
+    1. Add an import:  from my_app import views
+    2. Add a URL to urlpatterns:  path('', views.home, name='home')
+Class-based views
+    1. Add an import:  from other_app.views import Home
+    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
+Including another URLconf
+    1. Import the include() function: from django.urls import include, path
+    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
+"""
+from django.contrib import admin
+from django.urls import path, include
+
+urlpatterns = [
+    path("admin/", admin.site.urls),
+    path('^user/',include('user.urls',namespace='user')),
+    path('^course/',include('course.urls',namespace='course')),
+    path('^org/',include('org.urls',namespace='org')),
+    path('^operation/',include('operation.urls',namespace='operation')),
+]

+ 3 - 0
apps/org/views.py

@@ -0,0 +1,3 @@
+from django.shortcuts import render
+
+# Create your views here.

+ 0 - 0
apps/user/__init__.py


+ 3 - 0
apps/user/admin.py

@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.

+ 6 - 0
apps/user/apps.py

@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class UserConfig(AppConfig):
+    default_auto_field = "django.db.models.BigAutoField"
+    name = "user"

+ 0 - 0
apps/user/migrations/__init__.py


+ 57 - 0
apps/user/models.py

@@ -0,0 +1,57 @@
+from datetime import datetime
+
+from django.contrib.auth.models import AbstractUser
+from django.db import models
+
+
+# Create your models here.
+class UserProfile(AbstractUser):
+    image = models.ImageField(upload_to='user/', max_length=200, verbose_name="用户头像", null=True, blank=True)
+    nick_name = models.CharField(max_length=20, verbose_name="用户昵称", null=True, blank=True)
+    birthday = models.DateField(verbose_name="用户生日", null=True, blank=True)
+    gender = models.CharField(choices=(('girl', '女'), ('boy', '男')), max_length=10, verbose_name="用户性别",
+                              default='girl')
+    address = models.CharField(max_length=200, verbose_name="用户地址", null=True, blank=True)
+    phone = models.CharField(max_length=11, verbose_name="用户手机", null=True, blank=True)
+    # 这个字段控制激活
+    is_start = models.BooleanField(default=False, verbose_name="是否激活")
+    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")
+
+    def __str__(self):
+        return self.username
+
+    def get_msg_counter(self):
+        from operation.models import UserMessage
+        counter = UserMessage.objects.filter(message_man=self.id, message_status=False).count()
+        return counter
+
+    class Meta:
+        verbose_name = '用户信息'
+        verbose_name_plural = verbose_name
+
+
+class BannerInfo(models.Model):
+    image = models.ImageField(upload_to='banner/', verbose_name="轮播图片", max_length=200)
+    url = models.URLField(default='http://www.atguigu.com', max_length=200, verbose_name="图片链接")
+    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")
+
+    def __str__(self):
+        return str(self.image)
+
+    class Meta:
+        verbose_name = '轮播图信息'
+        verbose_name_plural = verbose_name
+
+
+class EmailVerifyCode(models.Model):
+    code = models.CharField(max_length=20, verbose_name="邮箱验证码")
+    email = models.EmailField(max_length=200, verbose_name="验证码邮箱")
+    send_type = models.IntegerField(choices=((1, 'register'), (2, 'forget'), (3, 'change')), verbose_name="验证码类型")
+    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")
+
+    def __str__(self):
+        return self.code
+
+    class Meta:
+        verbose_name = '邮箱验证码信息'
+        verbose_name_plural = verbose_name

+ 3 - 0
apps/user/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 22 - 0
apps/user/urls.py

@@ -0,0 +1,22 @@
+"""LearnPython02_SGG URL Configuration
+
+The `urlpatterns` list routes URLs to views. For more information please see:
+    https://docs.djangoproject.com/en/4.1/topics/http/urls/
+Examples:
+Function views
+    1. Add an import:  from my_app import views
+    2. Add a URL to urlpatterns:  path('', views.home, name='home')
+Class-based views
+    1. Add an import:  from other_app.views import Home
+    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
+Including another URLconf
+    1. Import the include() function: from django.urls import include, path
+    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
+"""
+from django.contrib import admin
+from django.urls import path
+
+urlpatterns = [
+    path("admin/", admin.site.urls),
+
+]

+ 3 - 0
apps/user/views.py

@@ -0,0 +1,3 @@
+from django.shortcuts import render
+
+# Create your views here.

+ 22 - 0
manage.py

@@ -0,0 +1,22 @@
+#!/usr/bin/env python
+"""Django's command-line utility for administrative tasks."""
+import os
+import sys
+
+
+def main():
+    """Run administrative tasks."""
+    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "LearnPython02_SGG.settings")
+    try:
+        from django.core.management import execute_from_command_line
+    except ImportError as exc:
+        raise ImportError(
+            "Couldn't import Django. Are you sure it's installed and "
+            "available on your PYTHONPATH environment variable? Did you "
+            "forget to activate a virtual environment?"
+        ) from exc
+    execute_from_command_line(sys.argv)
+
+
+if __name__ == "__main__":
+    main()