Django项目于之在线教育平台网站的实战开发(一)

news/2024/5/11 2:14:11/文章来源:https://cdtaogang.blog.csdn.net/article/details/89788542

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!

项目源码下载

目录

一丶叙述

二丶Windows环境搭建

三丶数据库模型设计

四丶搭建后台管理系统

五丶使用xadmin注册方式注册模型表

六丶xadmin后台页面全局配置


一丶叙述

1.项目介绍

  • 产品:关于Web端的教育平台网站
  • 商业模式:B2C模式 企业对个人
  • 设计模式:使用前后端不分离进行项目开发(后端控制前端的效果展示

2.开发环境(Windows)

  • 开发语言:Python3
  • 数据库:MySQL
  • 前端:X-admin(前端后台模板框架)
  • Web开发框架:Django
  • 编程工具:PyCharm

3.前端页面效果展示

二丶Windows环境搭建

  • 创建虚拟环境

  • 在django_py3虚拟环境中安装django

  • 创建django项目并配置解释器(django_py3)

  • 创建成功如下图所示

  • 配置settings中的数据库
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'mxonline','USER': 'root','PASSWORD': 'mysql','HOST': 'localhost','PORT': '3306',}
}
  •  创建mxonline数据库

  • 启动项目,然后提示如下报错(之前的django项目使用的是python2环境,当前项目环境为python3)

  • python3和python2两个的版本不一样,所以安装的东西也不一样:MySQLdb 安装mysql的连接包;工具安装 python3.x版本pip install mysqlclient 但是python2.x 版本pip install mysql-python

  • 重新运行项目成功

三丶数据库模型设计

1.创建app应用users(用户信息的应用)

  • 打开IDE--Tools/Run manage.py Task,创建应用app

  • 在users/models中创建用户信息模型表(该模型继承与django认证的user模型类,并且可以在原有的基础上添加所需表字段)
class UserProfile(AbstractUser):"""用户信息"""nick_name = models.CharField(max_length=50, verbose_name=u"昵称", default="")birday = models.DateField(verbose_name=u"生日", null=True, blank=True)gender = models.CharField(max_length=6, choices=(("male", u"男"), ("female", u"女")), default="female")address = models.CharField(max_length=100, default=u"")mobile = models.CharField(max_length=11, null=True, blank=True)image = models.ImageField(upload_to="image/%Y/%m", default=u"image/default.png", max_length=100)class Meta:verbose_name = "用户信息"verbose_name_plural = verbose_namedef __unicode__(self):return self.username
  • 在setting中注册users,并指定定义的模型类(默认覆盖AbstractUser类中的User表)
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',"users"
]
# 设置用户模型类
AUTH_USER_MODEL = "users.UserProfile"
  • 生成迁移文件并执行迁移

  • 查看数据库表信息

  • 在users/models中创建邮箱验证码模型表
class EmailVerifyRecord(models.Model):"""邮箱验证码"""code = models.CharField(max_length=20, verbose_name=u"验证码")email = models.EmailField(max_length=50, verbose_name=u"邮箱")send_type = models.CharField(verbose_name=u"验证码类型", choices=(("register",u"注册"),("forget",u"找回密码"), ("update_email",u"修改邮箱")), max_length=30)send_time = models.DateTimeField(verbose_name=u"发送时间", default=datetime.now)class Meta:verbose_name = u"邮箱验证码"verbose_name_plural = verbose_name
  • 在users/models中创建主页轮播图模型表
class Banner(models.Model):"""主页轮播图"""title = models.CharField(max_length=100, verbose_name=u"标题")image = models.ImageField(upload_to="banner/%Y/%m", verbose_name=u"轮播图", max_length=100)url = models.URLField(max_length=200, verbose_name=u"访问地址")index = models.IntegerField(default=100, verbose_name=u"顺序")add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")class Meta:verbose_name = u"轮播图"verbose_name_plural = verbose_name
  • 生成迁移文件并执行迁移

  • 查看生成的数据库表信息

2.创建app应用courses(课程相关的应用)

  • 创建app应用

  •  在courses/models中创建课程基本信息表
class Course(models.Model):"""课程基本信息表"""name = models.CharField(max_length=50, verbose_name=u"课程名")desc = models.CharField(max_length=300, verbose_name=u"课程描述")detail = models.TextField(verbose_name=u"课程详情")degree = models.CharField(verbose_name=u"难度", choices=(("cj","初级"), ("zj","中级" ), ("gj","高级")), max_length=2)learn_times = models.IntegerField(default=0, verbose_name=u"学习时长(分钟数)")students = models.IntegerField(default=0, verbose_name=u'学习人数')fav_nums = models.IntegerField(default=0, verbose_name=u'收藏人数')image = models.ImageField(upload_to="courses/%Y/%m", verbose_name=u"封面图", max_length=100)click_nums = models.IntegerField(default=0, verbose_name=u"点击数")add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")class Meta:verbose_name = u"课程"verbose_name_plural = verbose_name
  •  在courses/models中创建章节信息表
class Lesson(models.Model):"""章节信息表"""course = models.ForeignKey(Course, verbose_name=u"课程")name = models.CharField(max_length=100, verbose_name=u"章节名")add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")class Meta:verbose_name = u"章节"verbose_name_plural = verbose_name
  • 在courses/models中创建视频表
class Video(models.Model):"""视频表"""lesson = models.ForeignKey(Lesson, verbose_name=u"章节")name = models.CharField(max_length=100, verbose_name=u"视频名")add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")class Meta:verbose_name = u"视频"verbose_name_plural = verbose_name
  •  在courses/models中创建课程资源表
class CourseResource(models.Model):"""课程资源"""course = models.ForeignKey(Course, verbose_name=u"课程")name = models.CharField(max_length=100, verbose_name=u"名称")download = models.FileField(upload_to="course/resource/%Y/%m", verbose_name=u"资源文件", max_length=100)add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")class Meta:verbose_name = u"课程资源"verbose_name_plural = verbose_name

3.创建app应用organization(机构相关的应用)

  • 创建app应用

  •  在organization/models中创建城市基本信息表
class CityDict(models.Model):"""城市基本信息"""name = models.CharField(max_length=20, verbose_name=u"城市")desc = models.CharField(max_length=200, verbose_name=u"描述")add_time = models.DateTimeField(default=datetime.now)class Meta:verbose_name = u"城市"verbose_name_plural = verbose_name
  •  在organization/models中创建课程机构基本信息表
class CourseOrg(models.Model):"""课程机构基本信息"""name = models.CharField(max_length=50, verbose_name=u"机构名称")desc = models.TextField(verbose_name=u"机构描述")click_nums = models.IntegerField(default=0, verbose_name=u"点击数")fav_nums = models.IntegerField(default=0, verbose_name=u"收藏数")image = models.ImageField(upload_to="org/%Y/%m", verbose_name=u"logo", max_length=100)address = models.CharField(max_length=150, verbose_name=u"机构地址")city = models.ForeignKey(CityDict, verbose_name=u"所在城市")add_time = models.DateTimeField(default=datetime.now)class Meta:verbose_name = u"课程机构"verbose_name_plural = verbose_name
  •  在organization/models中创建教师基本信息表
class Teacher(models.Model):"""教师基本信息"""org = models.ForeignKey(CourseOrg, verbose_name=u"所属机构")name = models.CharField(max_length=50, verbose_name=u"教师名")work_years = models.IntegerField(default=0, verbose_name=u"工作年限")work_company = models.CharField(max_length=50, verbose_name=u"就职公司")work_position = models.CharField(max_length=50, verbose_name=u"公司职位")points = models.CharField(max_length=50, verbose_name=u"教学特点")click_nums = models.IntegerField(default=0, verbose_name=u"点击数")fav_nums = models.IntegerField(default=0, verbose_name=u"收藏数")add_time = models.DateTimeField(default=datetime.now)class Meta:verbose_name = u"教师"verbose_name_plural = verbose_name

4.创建app应用operation(用户操作的应用)

  • 创建app应用

  • 在operation/models中创建用户咨询表 
class UserAsk(models.Model):"""用户咨询"""name = models.CharField(max_length=20, verbose_name=u"姓名")mobile = models.CharField(max_length=11, verbose_name=u"手机")course_name = models.CharField(max_length=50, verbose_name=u"课程名")add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")class Meta:verbose_name = u"用户咨询"verbose_name_plural = verbose_name
  • 在operation/models中创建课程评论表
class CourseComments(models.Model):"""课程评论"""user = models.ForeignKey(UserProfile, verbose_name=u"用户")course = models.ForeignKey(Course, verbose_name=u"课程")comments = models.CharField(max_length=200, verbose_name=u"评论")add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")class Meta:verbose_name = u"课程评论"verbose_name_plural = verbose_name
  • 在operation/models中创建用户收藏表
class UserFavorite(models.Model):"""用户收藏"""user = models.ForeignKey(UserProfile, verbose_name=u"用户")fav_id = models.IntegerField(default=0, verbose_name=u"数据id")fav_type = models.IntegerField(choices=((1,"课程"),(2,"课程机构"),(3,"讲师")), default=1, verbose_name=u"收藏类型")add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")class Meta:verbose_name = u"用户收藏"verbose_name_plural = verbose_name
  • 在operation/models中创建用户消息表
class UserMessage(models.Model):"""用户消息"""user = models.IntegerField(default=0, verbose_name=u"接收用户")message = models.CharField(max_length=500, verbose_name=u"消息内容")has_read = models.BooleanField(default=False, verbose_name=u"是否已读")add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")class Meta:verbose_name = u"用户消息"verbose_name_plural = verbose_name
  • 在operation/models中创建用户学习课程表
class UserCourse(models.Model):"""用户学习课程"""user = models.ForeignKey(UserProfile, verbose_name=u"用户")course = models.ForeignKey(Course, verbose_name=u"课程")add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")class Meta:verbose_name = u"用户课程"verbose_name_plural = verbose_name

5.生成所有的数据表

  • 在settings中注册创建的应用
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',"users","courses","organization","operation"
]
  • 生成所有应用的migrations记录(迁移文件)
  • 说明:因为之前users应用已经进行生成过迁移,所以这里只显示出以下三个应用app,makemigrations 后面不跟上应用app,则表示执行全部app应用可生成的迁移文件

  • 在项目根目录下创建apps模块,将4个应用拷贝到该模块中,如下图所示

  • 此时在models中会发现导入其他应用的app会提示找不到,则需要右击apps模块,点击Soures Root(这个操作会让IDE去搜索此apps目录)

  •  执行迁移文件,然后会提示找不到users app应用,这个提示是正常的,因为上一步是针对于IDE编辑器本身查找路径,跟django框架本身没有任何关系,所以提示找不到

  • 在settings配置文件中添加apps路径
sys.path.insert(0, os.path.join(BASE_DIR, "apps"))
  • 再次执行迁移,则执行成功

  • 查看数据库mxonline表信息

四丶搭建后台管理系统

1.创建后台管理员用户

2.进入admin后台管理页面

  • 启动项目

  • 在浏览器输入http://127.0.0.1:8000/admin,进入后台登录页面

  • 使用创建的cdtaogang用户进行后台管理系统的登录

3.更改后台管理系统页面语言

  • 在settings中配置语言和时区
LANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/Shanghai'USE_TZ = False  # 更改数据库存储时间为本地时间而不是国际utc时间
  • 刷新页面

4.在django后端管理系统中显示用户信息表

  • 在users/admin中注册用户信息表
class UserProfileAdmin(admin.ModelAdmin):passadmin.site.register(UserProfile, UserProfileAdmin)
  • 刷新页面则显示注册的用户信息表

  • 进入用户信息表查看当前用户信息

5.使用X-admin(基于django的后台框架)来替换当前的django后台管理系统

  • 安装xadmin,结果报错,提示README.rst文件中编码问题

  • 解决方法:下载xadmin安装包GitHub - sshwsfc/xadmin: Drop-in replacement of Django admin comes with lots of goodies, fully extensible with plugin support, pretty UI based on Twitter Bootstrap.,打开安装包中的README.rst文件,将内容全部删除即可

  • 将xadmin-master.zip安装包放在项目根目录下,进入如下安装

  • 最后安装xadmin成功,但提示django版本需在1.11版本以上,但1.9版本不兼容,博主该项目django版本为1.9

  • 那么就换个django版本安装即可

  • 查看当前环境下的包

  • 将安装成功后的xadmin以及crispy_forms包添加到应用中
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',"users","courses","organization","operation","xadmin","crispy_forms"
]
  • 修改根基urls中的路由地址
from django.conf.urls import url
from django.contrib import admin
import xadminurlpatterns = [# url(r'^admin/', admin.site.urls),
url(r'^xadmin/', xadmin.site.urls),
]
  • 运行项目,在浏览器中输入http://127.0.0.1:8000/xadmin/,提示以下错误(原因是xadmin自带的表为找到)

  • 解决以上错误的方法:在数据库中去生成xadmin所需要的表(生成迁移并执行迁移)

  • 刷新http://127.0.0.1:8000/xadmin/ 页面,成功显示xadmin的后台管理页面(确实要比django 自带的admin后台管理系统强大的多)

6.源码安装xadmin 

  • 为了方便对xadmin源码进行修改操作,所以可以直接将下载好的xadmin-master.zip包进行解压后,在解压的文件中找xadmin文件拷贝到项目根目录下的extra_apps包下(需要创建extra_apps包),该操作为源码安装,如下图所示

  • 测试源码安装的xadmin是否成功,能否进入xadmin管理后台,在根级urls导入extra_apps包下的xadmin模块
from django.conf.urls import url
from django.contrib import admin
# import xadmin
from extra_apps import xadminurlpatterns = [# url(r'^admin/', admin.site.urls),
url(r'^xadmin/', xadmin.site.urls),
]
  • 修改settings配置文件中注册的xadmin为extra_apps.xadmin
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',"users","courses","organization","operation","extra_apps.xadmin","crispy_forms"
]
  • 刷新页面,xadmin后台管理页面显示不变,说明源码安装成功

五丶使用xadmin注册方式注册模型表

1.注册users应用下的模型表

  • 定义py文件的签名模板(每当创建一个py文件时,就会自动添加定义的模板内容)

  • 在users应用下创建adminx.py文件(xadmin会自动去搜索应用下的此文件),在该文件中进行模型表注册
# -*- coding: utf-8 -*-
__author__ = 'cdtaogang'
__date__ = '2019/5/4 15:24'from extra_apps import xadmin
from .models import EmailVerifyRecordclass EmailVerifyRecordAdmin(object):passxadmin.site.register(EmailVerifyRecord, EmailVerifyRecordAdmin)
  • 刷新页面,就能看到以上注册的邮箱验证码了

  • 在xadmin后台中添加邮箱验证码

  • 自定义邮箱验证码列表显示字段
class EmailVerifyRecordAdmin(object):list_display = ['code', 'email', 'send_type', 'send_time']  # 列表字段展示
  • 刷新页面,查看邮箱验证码列表显示字段

  • 添加邮箱验证码列表页面中搜索字段框
class EmailVerifyRecordAdmin(object):list_display = ['code', 'email', 'send_type', 'send_time']  # 列表字段展示search_fields = ['code', 'email', 'send_type']  #  搜索框显示
  • 刷新页面,查看邮箱验证码列表页搜索框

  • 测试搜索框功能

 

  • 添加筛选器
list_filter = ['code', 'email', 'send_type', 'send_time']
  • 测试筛选器功能

  • 在users/adminx中进行注册轮播图模型表
class BannerAdmin(object):list_display = ['title', 'image', 'url', 'index', 'add_time']search_fields = ['title', 'image', 'url', 'index']list_filter = ['title', 'image', 'url', 'index', 'add_time']xadmin.site.register(Banner, BannerAdmin)
  • 刷新页面,成功显示出轮播图

2.注册courses应用下的模型表

  • 在courses应用下创建adminx.py文件,在该文件中注册课程基本信息表
class CourseAdmin(object):list_display = ['name', 'desc', 'detail', 'degree', 'learn_times', 'students']search_fields = ['name', 'desc', 'detail', 'degree', 'students']list_filter = ['name', 'desc', 'detail', 'degree', 'learn_times', 'students']xadmin.site.register(Course, CourseAdmin)
  • 查看后台管理页面中课程信息表

  • 注册章节信息表
class LessonAdmin(object):list_display = ['course', 'name', 'add_time']search_fields = ['course', 'name']list_filter = ['course__name', 'name', 'add_time']xadmin.site.register(Lesson, LessonAdmin)
  • 查看后台管理页面中章节信息表

  • 测试添加课程以及章节

  • 添加章节成功后,在章节列表中课程字段后面会出现一个感叹号,点击感叹号则会弹出该门课程的详细信息

  • 注册视频信息表
class VideoAdmin(object):list_display = ['lesson', 'name', 'add_time']search_fields = ['lesson', 'name']list_filter = ['lesson', 'name', 'add_time']xadmin.site.register(Video, VideoAdmin)
  • 查看后台管理页面中视频信息表

  • 注册课程资源表
class CourseResourceAdmin(object):list_display = ['course', 'name', 'download', 'add_time']search_fields = ['course', 'name', 'download']list_filter = ['course', 'name', 'download', 'add_time']xadmin.site.register(CourseResource, CourseResourceAdmin)
  • 查看后台管理页面中课程资源表

3.注册organization应用下的模型表

  • 在organization应用下创建adminx.py文件,在该文件中注册城市基本信息表和课程机构基本信息表以及教师基本信息表
class CityDictAdmin(object):list_display = ['name', 'desc', 'add_time']search_fields = ['name', 'desc']list_filter = ['name', 'desc', 'add_time']class CourseOrgAdmin(object):list_display = ['name', 'desc', 'click_nums', 'fav_nums']search_fields = ['name', 'desc', 'click_nums', 'fav_nums']list_filter = ['name', 'desc', 'click_nums', 'fav_nums']class TeacherAdmin(object):list_display = ['org', 'name', 'work_years', 'work_company']search_fields = ['org', 'name', 'work_years', 'work_company']list_filter = ['org', 'name', 'work_years', 'work_company']xadmin.site.register(Teacher, TeacherAdmin)
xadmin.site.register(CityDict, CityDictAdmin)
xadmin.site.register(CourseOrg, CourseOrgAdmin)
  • 查看后台管理页面中organization应用下的模型表

4.注册operation应用下的模型表

  • 在operation应用下创建adminx.py文件,在该文件中注册用户咨询表丶用户学习课程表丶用户消息表丶课程评论以及用户收藏表
class UserAskAdmin(object):list_display = ['name', 'mobile', 'course_name', 'add_time']search_fields = ['name', 'mobile', 'course_name']list_filter = ['name', 'mobile', 'course_name', 'add_time']class UserCourseAdmin(object):list_display = ['user', 'course', 'add_time']search_fields = ['user', 'course']list_filter = ['user', 'course', 'add_time']class UserMessageAdmin(object):list_display = ['user', 'message', 'has_read', 'add_time']search_fields = ['user', 'message', 'has_read']list_filter = ['user', 'message', 'has_read', 'add_time']class CourseCommentsAdmin(object):list_display = ['user', 'course', 'comments', 'add_time']search_fields = ['user', 'course', 'comments']list_filter = ['user', 'course', 'comments', 'add_time']class UserFavoriteAdmin(object):list_display = ['user', 'fav_id', 'fav_type', 'add_time']search_fields = ['user', 'fav_id', 'fav_type']list_filter = ['user', 'fav_id', 'fav_type', 'add_time']xadmin.site.register(UserAsk, UserAskAdmin)
xadmin.site.register(UserCourse, UserCourseAdmin)
xadmin.site.register(UserMessage, UserMessageAdmin)
xadmin.site.register(CourseComments, CourseCommentsAdmin)
xadmin.site.register(UserFavorite, UserFavoriteAdmin)
  • 查看后台管理页面中operation应用下的模型表 

六丶xadmin后台页面全局配置

1.更换xadmin主题

  • 开启主题功能,在users/adminx中进行如下编写
from extra_apps.xadmin import viewsclass BaseSetting(object):enable_themes = True  # 开启主题功能use_bootswatch = Truexadmin.site.register(views.BaseAdminView, BaseSetting)
  • 查看Terminal终端日志提示以下错误

  • 解决方法:卸载django_py3环境中的xadmin包(因之前博主是通过pip3 install xadmin-master.zip包,并且源码安装了xadmin),一直都是通过from extra_apps import xadmin导入方式,但现在该方式报错了,这个错是内部代码错误,所以博主这里就只保留源码的xadmin以及pip安装xadmin包时安装的依赖包

  • 卸载完环境中的xadmin包后,需要在settings中将xadmin的搜索路径以及将添加的应用名extra_apps.xadmin修改为xadmin
sys.path.insert(0, os.path.join(BASE_DIR, "extra_apps"))INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',"users","courses","organization","operation","xadmin","crispy_forms"
]
  • 将extra_apps目录进行Sources Root操作(在代码中可直接import xadmin)并且在根级urls中进行如下修改
from django.conf.urls import url
from django.contrib import admin
import xadmin
# from extra_apps import xadminurlpatterns = [# url(r'^admin/', admin.site.urls),
url(r'^xadmin/', xadmin.site.urls),
]
  • 以防万一还需要将所有应用下的adminx中的导入xadmin模块的方式修改为import xadmin(这个自己修改即可),重新修改users/amdinx中的导入views以及xadmin方式,如下
import xadmin
from .models import EmailVerifyRecord, Banner
from xadmin import views
# from extra_apps import xadmin  错误的导入
# from extra_apps.xadmin import views  错误的导入class BaseSetting(object):enable_themes = True  # 开启主题功能use_bootswatch = Trueclass EmailVerifyRecordAdmin(object):list_display = ['code', 'email', 'send_type', 'send_time']  # 列表字段展示search_fields = ['code', 'email', 'send_type']  #  搜索框显示list_filter = ['code', 'email', 'send_type', 'send_time']  # 筛选字段class BannerAdmin(object):list_display = ['title', 'image', 'url', 'index', 'add_time']search_fields = ['title', 'image', 'url', 'index']list_filter = ['title', 'image', 'url', 'index', 'add_time']xadmin.site.register(EmailVerifyRecord, EmailVerifyRecordAdmin)
xadmin.site.register(Banner, BannerAdmin)
xadmin.site.register(xadmin.views.BaseAdminView, BaseSetting)
  • 重新启动项目,刷新xadmin后台管理页面,在页面右上方栏多出一个主题框

  • 结果发现只显示了默认和Bootstrap2,这肯定是不对的,查看终端看有没有保存提示以下错误,但是没有指定是摸个模块下的第几行,说明是在try中捕获的异常

  • 找到xadmin包中关于主题的模块themes.py模块,博主进行打印测试发现,因为博主使用的是python3开发,所以会进入six.PY3判断逻辑中,根据Terminal终端提示的'str' object has no attribute 'decode',发现是这里出错导致代码没有继续执行,所以在页面中主题栏那里只显示了(默认和Bootstrap2),解决方法是注释掉此if six.PY3代码,则显示全部主题(该解决方法百度没有,因为百度上的解决方法都是针对于python2开发环境的)

  • 注释掉以上红框的代码后,刷新页面成功显示出全部主题

  • 博主按自己喜好更改了如下主题

2.修改页面左上方的Django Xadmin以及页面底部的我的公司

  • 在users/adminx模块中进入如下编写
class GlobalSettings(object):site_title = "慕学后台管理系统"site_footer = "慕学在线网"xadmin.site.register(views.CommAdminView, GlobalSettings)
  • 刷新页面,成功显示出定义的名字

 3.将页面左侧显示的数据表栏信息,进行归纳收缩

  • 只需要在GlobalSettings类中添加menu_style = "accordion" 代码即可
class GlobalSettings(object):site_title = "慕学后台管理系统"site_footer = "慕学在线网"menu_style = "accordion"
  • 刷新页面,效果如下

4.设置左侧栏数据表名为中文名称

说明:在4个应用下的apps中定义verbose_name变量的值,并且在应用下的__init__.py文件中设置default_app_config的值

  • 在users/apps中定义verbose_name变量的值
class UsersConfig(AppConfig):name = 'users'verbose_name = u"用户信息"
  • 在users/__init__中定义default_app_config的值
default_app_config = "users.apps.UsersConfig"
  • 在organization/apps中定义verbose_name变量的值
class OrganizationConfig(AppConfig):name = 'organization'verbose_name = u"机构管理"
  • 在organization/__init__中定义default_app_config的值
default_app_config = "organization.apps.OrganizationConfig"
  • 在operation/apps中定义verbose_name变量的值
class OperationConfig(AppConfig):name = 'operation'verbose_name = u"用户操作"
  • 在operation/__init__中定义default_app_config的值
default_app_config = "operation.apps.OperationConfig"
  • 在courses/apps中定义verbose_name变量的值
class CoursesConfig(AppConfig):name = 'courses'verbose_name = u"课程管理"
  • 在courses/__init__中定义default_app_config的值
default_app_config = "courses.apps.CoursesConfig"
  • 刷新页面成功显示出定义的模型表名称

  • 还是黑色的主题看着顺眼

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_745168.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django项目于之在线教育平台网站的实战开发(完结)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/90141577 项目源码下载 目录 一丶常见web攻击及防范…

Django与Elasticsearch交互打造搜索引擎网站(一)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 项目源码下载 目录 一丶叙述 二丶elasticsearch-rtf的安装与测试 三丶elasticsearch-head插件以及kibana的安装 四丶elasticsearch搜索引擎的使…

2020 搭建一个属于自己的动态网站(WordPress+云服务器BCC)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 文章目录前言一、WordPress是什么?二、建站准备1.准备服务器2.准备域名三、网站搭建1.安装宝塔面板2.宝塔面板搭建站点3.域名解析4.通过…

2021 搭建一个属于自己的静态网站(Hexo+GitHub Pages)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 文章目录前言一、Hexo是什么?二、GitHub Pages是什么?三、建站准备1.准备Github账号2.准备域名四、网站搭建1. 安装 Node.js…

2021 WordPress 网站迁移(从百度云BCC 迁移到 阿里云ECS)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 文章目录前言一、迁移准备1. 备份原网站2. 备份数据库3. 准备服务器4. 准备好域名5. ICP域名备案二、网站迁移1. ICP备案成功2. 安装宝塔面板3. 创建…

网站架构基础学习(详细)

网站架构基础学习(详细) 1.网站架构的发展经历: 初始阶段的网站(特点:没人)应用程序,数据库,文件都在一个服务器中 比如我们学的是开发,我们要写一个网站,因为这是一个项目, 所以我们要把它部署一下&#x…

云服务器怎么显示网站数据库名称,云服务器怎么显示网站数据库

云服务器怎么显示网站数据库 内容精选换一换本章节指导您使用MongoDB客户端,通过弹性云服务器内网方式连接GaussDB(for Mongo)集群实例。操作系统使用场景:弹性云服务器的操作系统以Linux为例,客户端本地使用的计算机系统以Windows为例。目标…

给自己的网站带来和平:实现自动开启Cloudflare的5秒盾和验证码

引言 梦也不分明,远山云乱横。 ——勿埋我心 你的网站有没有被攻击过?这个脚本虽然不能抵御那些恐怖的“洪流”,但是抵挡一下“小打小闹”应该问题不大。   原理:通过检测系统负载(cpu或load)自动开启clo…

过滤器的使用实现网站访问计数器

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666) 一、创建过滤器需要使用javax.servlet.Filter接口,同时实现Filter接口的3个方法。 CountFilter: package com.home.web;import java.io.IOException…

Nginx配置SSL证书部署HTTPS网站(颁发证书)

自行颁发不受浏览器信任的SSL证书 手动颁发 xshell登录服务器,使用openssl生成RSA密钥及证书 # 生成一个RSA密钥 $ openssl genrsa -des3 -out tfjybj.key 1024# 拷贝一个不需要输入密码的密钥文件 $ openssl rsa -in dmsdbj.key -out tfjybj_nopass.key# 生成一…

实战学习NodeJS建站(5)—nodejs 访问 redis

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666) from:http://blog.csdn.net/qidong7/article/details/52888211 前提是你已经安装了nodejs环境。 node_redis是nodejs访问redis的客户端安装包&…

excel修改列名_利用Excel分析招聘网站数据分析师岗位

Excel是进行数据分析用得最多、最基本的工具,下面内容是运用Excel2013对一份数据分析师招聘网站的数据进行分析。Excel数据分析的步骤:1、提出问题(明确数据分析目的)2、理解数据(理解数据列名的意义)3、数…

图片变色_『设计|分享』设计师的色彩网站推荐(一)—渐变色

整理:设计与设计师(ID:Design-Designer)作者:设计与设计师转载请注明出处。配色对一项设计的重要性,这边就不多加赘述。在色彩设计应用中,我们对颜色不同程度的理解,将影响到产品&am…

php写伪静态,php网站动态网站的伪静态写法

PHP网站是主要是以动态网页展示,有时候为了方便优化,也可以设置伪静态来进行网站的优化。主要是通过下面的方式进行伪静态的书写:首先我们先查看Apache是否支持mod_rewrite功能,可以通过PHP提供的phpinfo()函数查看是否支持重写功…

ab压力测试_使用ab命令对网站进行压力测试

概述这是apache自带的一个网站压力测试工具,是ApacheBench的缩写,我们可以使用这个工具来对我们的网站进行压力测试安装在ubuntu上要安装下面这个包sudo apt-get install apache2-utils在centos下是下面这个包sudo yum install httpd-tools -y使用可以直…

虾米音乐java_抓取虾米音乐网站音乐,搜索虾米音乐功能的java实现

可以实现和点点网音乐分享功能暂时还没做界面,先留下代码package com;/*** 歌曲实体* author hanfei**/public class Song {private String title;private String songUrl;private String flashUrl;private String image;public String getTitle() {return title;}p…

百度二级网页打不开_网站降权都是什么原因 - 百度蜘蛛池博客

原出处:蜘蛛池博客原文链接:网站降权都是什么原因? - 蜘蛛池博客我们要学会找出网站降权的原因,才能知道如何对症下药,解决问题。那么,网站降权都是什么原因?接下来蜘蛛池博客小编就跟大家介绍几…

oracle表空间状态如何离线,read/write - Oracle表空间的状态_数据库技术_Linux公社-Linux系统门户网站...

表空间状态-READ ONLY、READ WRITE1. 只读表空间的主要用途就是为了消除对数据库大部分静态数据的备份和恢复的需要。Oracle不会更新只读表空间爱你的文件,因此这部分文件可以存储于只读介质中,例如CD-ROM或WORM drives。2. 只读表空间并不是为了满足归档…

计算机违反网络策略该怎么弄,网络策略设置禁止您使用该网站获取您计算机的更新程序。怎么办?...

进入微软windows update网站提示:网络策略设置禁止您使用该网站获取您计算机的更新程序。如果您确认此消息有误,请向您的系统管理员咨询。本人找到的是在 组策略(打开方法 运行->gpedit.msc)->计算机配置->管理模板->windows组件->window…

基于php网上购物商城用例图,动漫周边电商网站的设计与实现(PHP,MySQL)(含录像)...

动漫周边电商网站的设计与实现(PHP,MySQL)(含录像)(毕业论文10000字,程序代码,MySQL数据库)摘要本商品电商网站是为了方面用户在线购物而设计开发的商品电商网站,其开发过程主要包括前端应用程序的开发和后台数据库的建立和维护两个方面。本网站的开发可以在网上进行…