零基础使用Django2.0.1打造在线教育网站(九):初识后台管理

关于博主

努力与运动兼备~~~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!

                 微信公众号:  啃饼思录
                 QQ: 2810706745(啃饼小白)

写在前面

在前面的笔记中我们进行了需求分析和数据库的设计,本篇笔记主要介绍Django自带的用于后台管理的admin,并在此基础上介绍另一个插件xadmin的使用。

本篇笔记对应于第九篇代码,对应于github的位置是https://github.com/licheetools/eduline

django自带的admin介绍

先点击菜单下的Tools按钮 ,然后点击下拉的 Run manage.py Task按钮,在命令行中输入:runserver再回车:

在浏览器地址栏中输入http://127.0.0.1:8000/admin出现:

恭喜你,你已经进入到Django admin的后台管理网页了。

你可能会问,为什么会有这个页面,我可是什么操作也没干啊(一脸无辜)。对的,你确实什么也不用干,因为Django已经帮你做好了。

打开eduline/settings.py文件,找到第34行代码:

看到没,admin它其实也是一个app,不过在我们新建项目时就已经创建好了,不用你去动手,是不是很人性化。

我们现在再来打开eduline/urls.py文件,找到第19行代码:

看到没,admin竟然已经自动在url中进行了配置(整个项目就它一个配置了url,可见重要性不一般),所以你前面访问http://127.0.0.1:8000/admin才会有响应。

我们回到后台页面:

有登录按钮,所以我们需要先注册一个账号,Django默认是不会给你创建账号的。

注册超级管理员

先点击菜单下的Tools按钮 ,然后点击下拉的 Run manage.py Task按钮,在命令行中输入

createsuperuser 

然后系统会提示你输入以下信息:Username,Email address,Password:

接下来进行数据库的生成和迁移操作(因为users应用中多了一个名为NewBee的超级管理员),我们只需要对users 这个应用进行相关操作:

makemigrations users
migrate users

登入admin后台

运行一下我们的项目,在浏览器地址栏输入:http://127.0.0.1:8000/admin,并在登录页面输入刚才注册的账号信息(默认登录方式是用户名 + 密码,后面会教你如何实现用户名或邮箱+密码登录的登录形式),点击登录,就进入后台了:

全是英文,我们去设置里配置一下:打开eduline/settings.py文件,找到第117行代码:

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

我们修改为如下:

# 将语言修改为中文
LANGUAGE_CODE = 'zh-hans'

# 将时区修改为上海
TIME_ZONE = 'Asia/Shanghai'

# 数据库存储使用时间,True时间会被存为UTC的时间。所以采用False
USE_TZ = False
刷新一下我们的后台网页:

恭喜你,admin被汉化成功了。接下来就是把我们前面定义的数据库字段都显示出来,首先把我们的UserProfile注册进来。

注册UserProfile

打开eduline/apps/users/admin.py文件,添加如下代码:

from django.contrib import admin

# Register your models here.
# 因为处于同一个目录之下,所以可以直接使用.models代替当前目录
from .models import UserProfile


# 写一个管理器,命名规则:Model+Admin
class UserProfileAdmin(admin.ModelAdmin):
    pass


# 将UserProfile注册进我们的admin中, 并为它选择管理器UserProfileAdmin
admin.site.register(UserProfile, UserProfileAdmin)
刷新一下我们的后台网页:

Users 是用户所在表的名称:

点击右侧的增加用户信息:
我们看到一下信息:

我们尝试再次新建一个用户:NewBai

新建成功了,同时注意Django会自动帮我们把密码进行加密,而且不能反解,也就是说单向密码加密。

xadmin的安装

还记得前面的一篇笔记吗,我让你新建一个文件夹A,把下载的xadmin文件放在里面,不记得请查阅这篇笔记:零基础使用Django2.0.1打造在线教育网站(六):教育网站开发配置(更新一下,那个版本里面有太多的坑需要自己填,这里我就把已经填完坑的版本贴一下,大家在本篇笔记对应的Github上下载包,亲测有用)。

现在,我们新建一个名为extra_apps的Python package ,用来存放我们的第三方插件,并将前面下载的xadmin文件(解压之后)移入其中:

同时需要对路径进行配置:打开eduline/settings.py文件,找到里面的第16行代码,我们加入以下内容:

import os, sys

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
sys.path.insert(0,os.path.join(BASE_DIR, 'extra_apps'))

接下来是xadmin的安装:在确保前面的操作完成以后,我们打开eduline/settings.py文件,找到里面的第35行代码,在后面修改为如下:

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'
]

然后打开eduline/urls.py文件,把urls中默认的admin修改为xadmin:

from django.urls import path

import xadmin

urlpatterns = [
path('xadmin/', xadmin.site.urls),

]

然后进行我们数据库的生成和迁移操作:makemigrationsmigrate

你会发现执行第一个命令就报错了,那是因为我们缺少一些库的支持,我们依次按照如下库:

pip install future

pip install six

pip install httplib2

pip install django-import-export

pip install django-formtools==2.1   # 记住一定是2.1的版本,否则会出错

使用的命令为:pip install package -i https://pypi.tuna.tsinghua.edu.cn/simple

之后会安装一大堆库,我们使用pip list命令查看一下:

为了便于你查看自己是否缺少某个库,我这里贴一下我的各个库的版本(你各个库的版本不能低于我的版本,否则就可能会出错):

(eduline) F:\Envs\eduline>pip list

Package                          Version

-------------------------------- --------

confusable-homoglyphs            3.1.1

diff-match-patch                 20121119

Django                           2.0.1

django-crispy-forms              1.7.2

django-crispy-forms-registration 0.1.3

django-formtools                 2.1

django-import-export             1.0.1

django-registration              2.4.1

django-reversion                 3.0.0

et-xmlfile                       1.0.1

future                           0.16.0

httplib2                         0.11.3

jdcal                            1.4

mysqlclient                      1.3.13

odfpy                            1.3.6

openpyxl                         2.5.4

Pillow                           5.2.0

pip                              18.0

pytz                             2018.5

PyYAML                           3.13

setuptools                       40.0.0

six                              1.11.0

tablib                           0.12.1

unicodecsv                       0.14.1

wheel                            0.31.1

xlrd                             1.1.0

xlwt                             1.3.0

接下来,我们重新进行数据库的生成和迁移操作:makemigrationsmigrate

看到没有,它也生成了几个数据表,我们打开Navicat,去数据库里看一下:

现在我们运行一下我们的项目,在浏览器地址中输入http://127.0.0.1/xadmin,然后看到:

恭喜你,xadmin的配置已经完成了,xadmin的页面是不是比admin的页面好看多了。

Xadmin使用Bootstrap3.0框架精心打造。基于Bootstrap3,Xadmin天生就支持在多种屏幕上无缝浏览,并完全支持Bootstrap主题模板,让您的管理后台也动感、多样起来。,这是它的的官方网站:

你可以去看一下它的示例和文档,可能需要翻墙,不过这对你以后的运用确实帮助很大的。

Xadmin的使用介绍

正如前面你所知道的,Xadmin是基于Django的admin来开发的,所以Xadmin也继承了许多admin的用法,下面就分别介绍一下它们的使用情况:

因为我们之前在admin里面已经注册了UserProfile,所以xadmin里面也就有了这个信息,那我们接下来就设置一下我们文件的格式,让系统默认去寻找我们xadminadminx.py文件,而不是去寻找原来admin的admin.py文件。

验证码功能的实现

我们打开eduline/apps/users这个文件夹,在里面新建一个名为adminx.py的文件,我们准备开始验证码功能的实现,在其中添加如下代码:

#!/user/bin/python

# -_- coding:utf-8 -_-

# @Time: 2018/3/26 10:05

# @Author: Envse

# @File: adminx.py

# 导入xadmin,如果出现字体底下出现红色属于正常现象(实际上环境已经配置过)

import xadmin

# 因为处于同一个目录之下,所以可以直接使用.models代替当前目录

from .models import EmailVerifyRecord

# 写一个管理器,命名规则:Model+Admin,注意这里不再是继承admin,而是继承object这个最高类

class EmailVerifyRecordAdmin(object):

pass

# 将EmailVerifyRecord注册进我们的admin中, 并为它选择管理器EmailVerifyRecordAdmin

xadmin.site.register(EmailVerifyRecord, EmailVerifyRecordAdmin)

现在我们重新运行一下我们的项目,在浏览器地址栏中输入:http://127.0.0.1:8000/xadmin回车,出现:

你可能会好奇这个是怎样实现的,其实这就是你数据库设计的字段啊:你打开users/models.py文件,看到第30行代码:

Meta信息就是用于后台显示的,其中verbose_name定义的是后台主页面显示字段,verbose_name_plural是verbose_name的复数形式,如果这两者不相等,那么verbose_name_plural就是在verbose_name后面加个s字母而已,所以我们尽量一样,便于管理和查看。

我们现在尝试添加一个邮箱验证码,点击右侧的增加邮箱验证码按钮,输入相关信息,可以看到添加成功了:

接下来,我们看一下右侧的显示列,点击一下:

里面可以选择显示的内容,我们现在想在刚才的页面同时显示这些全部信息,所以需要配置一下:我们打开users/adminx.py文件,在里面的管理器中设置list_display字段:

# 写一个管理器,命名规则:Model+Admin,注意这里不再是继承admin,而是继承object这个最高类

class EmailVerifyRecordAdmin(object):

# 配置后台显示的列信息

list\_display = 'code', 'email', 'send\_type', 'send\_time'  # 一次显示你想出现的多行数据,

# 这里面的字段都是你在前面数据库中定义的,请保持数据的一致

然后还可以配置过滤器,搜索框等,这里就不一一说明,直接贴上代码了:

# 写一个管理器,命名规则:Model+Admin,注意这里不再是继承admin,而是继承object这个最高类

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'  # 过滤器

之后刷新一下你的网页,成了这个样子:

细心的小伙伴们可能发现,这里竟然可以导出操作,是的,这样变得很方便了:

你可以根据自己的喜好来导出不同的文件格式,比如xml:

admin, xadmin和其他后台管理系统的区别

像PHP,JAVA等其他语言,它们是按照一个功能模块来进行一个功能设计的。而admin和 xadmin就不一样了,它们是对于每张表都可以进行增删改查的管理器,因此我们还可以在增删改查的基础上加上我们自己的后台逻辑,完成我们自定义的功能。因此,从某种程度可以说它是不依赖于具体业务的,不管什么系统后台都是由表组成。

既然这样,我们可以在其余的各个表中,都加上这些个功能。

打开users/adminx.py文件,我们来实现轮播图的注册,和前面验证码的操作类似,这里就不细说,直接贴上代码:

from .models import Banner

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)

再次强调一下:这里面的字段都是你前面在数据库中定义的,请保持数据库字段定义的一致性,不要乱写,否则后面会出很大的BUG!

刷新一下你的页面,就变成了这个样子:

好了小伙伴们,你现在可以照葫芦画瓢了,尝试着把其余3个apps都注册到后台吧。那些,我们下一篇笔记再介绍,接下来教你一个自定义文件信息的技能。

自定义文件信息

打开Pycharm,点击一下主菜单的File,选择下拉的Settings,选择Editor,再选择Code Style,选择文件模板:

看到5的信息了么:

#!/user/bin/python 

# -_- coding:utf-8 -_-  # 编码格式

# @Time: ${DATE} ${TIME}   # 文件生成时间

# @Author: Envse   # 作者

# @File: ${NAME}.py   # 文件名

你可以自定义这些信息,当然还可以根据4的选择不同来添加不同的信息。然后点击apply,最后是ok,这样你每次创建新的py文件以后,这些信息就都会出现在文件的头部了。怎么样,新技能Get了没有?

至此,关于初识后台管理这一部分就先说这么多,下一篇笔记就完善其余3个apps的注册,还有xadmin的全局配置,打造一个属于自己的网站后台管理系统。

本篇笔记对应于第九篇代码,对应于github的位置是https://github.com/licheetools/eduline,另外xadmin的原始安装包我也上传了,大家可以前往下载,有空的话,可以给项目一个star,感谢你的赏阅。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python爬虫与数据挖掘

如何在vSphere Client的虚拟机上安装Centos6.7操作系统

前几天给小伙伴们介绍了Centos对应版本的下载教程以及如何在vSphere Client上如何创建虚拟机,感兴趣的童鞋们可以点击进去看看~~

17510
来自专栏linux驱动个人学习

Linux进程上下文切换过程context_switch详解--Linux进程的管理与调度(二十一)

因此当前linux的调度程序由两个调度器组成:主调度器,周期性调度器(两者又统称为通用调度器(generic scheduler)或核心调度器(core sch...

49630
来自专栏Java帮帮-微信公众号-技术文章全总结

Web-第十九天 Linux学习【悟空教程】

UNIX操作系统是商业版,需要收费,价格比Microsoft Windows正版要贵一些。不过UNIX有免费版的,例如:NetBSD等类似UNIX版本。

19740
来自专栏FreeBuf

Shodan新手入坑指南

*本文原创作者:xiaix,本文属FreeBuf原创奖励计划,未经许可禁止转载 亲们~黑五 Shodan Membership 只要5刀,你剁手了没? 什么是 ...

60250
来自专栏张戈的专栏

shell脚本实现整站缓存和预缓存,进一步提升网站整体加载速度

在 Linux 中,shell 脚本结合系统任务计划 crontab,非常简单就能实现一些复杂程序才能完成的工作,开发成本低,且简单易学。 张戈博客之前也分享过...

48890
来自专栏云计算教程系列

如何在Ubuntu 16.04上安装Prometheus

Prometheus是一个功能强大的开源监控系统,可从您的服务中收集指标并将其存储在时间序列数据库中。它通过Grafana等工具提供多维数据模型,灵活的查询语言...

1.2K20
来自专栏lonelydawn的前端猿区

基于java swing的设备管理系统

一.系统介绍 一个简易的设备管理系统,包含了管理员登录注册、设备录入、设备状态管理功能,具体状态有购买时、正在运行、正在修理和已报废。 二.开发环境 开发环境:...

35370
来自专栏landv

robocopy的用法,数据库局域网备份

28050
来自专栏北京马哥教育

使用 Nginx 提升网站访问速度

本文主要介绍如何在 Linux 系统上安装高性能的 HTTP 服务器 —— Nginx、并在不改变原有网站结构的条件下用 Nginx 来提升网站的访问速度。 N...

49480
来自专栏Java帮帮-微信公众号-技术文章全总结

Java模板生成word文档/POI生成Excel【面试+工作】

首先要指出的是,实现的思路和freeMarker差不离,将.doc的文档做相应的转换后转为.ftl文档,其中的变量会以${xxx}来代替,这样就可以

1K20

扫码关注云+社区

领取腾讯云代金券