系列文章目录
第一章 Django使用的基础知识
第二章 setting.py文件的配置
第三章 路由的定义与使用
第四章 视图的定义与使用
第五章 二进制文件下载响应
第六章 Http请求&HttpRequest请求类
第七章 会话管理(Cookies&Session)
第八章 文件上传实现
第九章 多种视图view
第十章 Django5模板引擎
第十一章 模型定义与使用
第十二章 ORM执行SQL语句和事务
第十三章 表单定义与使用
第十四章 内置Admin系统
第十五章 内置Auth认证系统
文章目录
- 系列文章目录
- 前言
- 内置管理系统初体验
- 注册模型到Admin系统
- 方式一,直接将模型注册到admin后台,以BookTypeInfo模型为例
- 方式二:自定义类,继承ModelAdmin,以BookInfo为例
- 内置Admin系统自定义设置
- 内置Admin系统二次开发
- 自定义Admin模版
- 总结
前言
Admin后台系统也成为网站后台管理系统,主要对网站的信息进行管理,如文字、图片、影音和其他日常使用的文件的发布、更新、删除等操作,也包括功能信息的统计和管理,如用户信息、订单信息和访客信息等。简单来说,它是对网站数据库和文件进行快速操作和管理的系统,以使网页内容能够及时得到更新和调整。
内置管理系统初体验
当一个网站上线之后,网站管理员通过网站后台系统对网站进行管理和维护。
Django 已内置Admin后台系统,在创建Django项目的时候,可以从配置文件settings.py中看到项目已默认启用Admin后台系统。
urls.py里定义了Admin系统的首页地址:
我们浏览器输入http://127.0.0.1:8000/admin/即可进入Admin系统首页,默认跳转到Admin系统登录页面。
我们发现是英文,我们一般开发交付给客户,必须是本地化中文。我们可以加一个中文本地化的中间件即可实现;
settings.py里加下:
# 使用中文
'django.middleware.locale.LocaleMiddleware',
注意下有顺序要求。
Admin系统用户,权限,认证相关的表有如下6个,其中auth_user是用来存后台管理员信息,默认里面是没有数据的。
我们可以通过python内置的manage.py的createsuperuser命令来创建超级管理员的账号和密码。
输入 createsuperuser命令,提示让我们输入用户名,再输入邮箱,以及密码和确认密码,最终我们可以强制输入y,确认。
这样auth_user数据库表有就有管理员数据了。
我们回到Admin登录页面,输入刚才创建的用户名和密码:
点击登录按钮,则进入系统管理主页;
在Admin后台系统中可以看到,网页布局分为站点管理、认证和授权、用户和组,分别说明如下: (1)站点管理是整个Admin后台的主体页面,整个项目的App所定义的模型都会在此页面显示。 (2)认证和授权是Django内置的用户认证系统,包括用户信息、权限管理和用户组设置等功能。 (3)用户和组是认证和授权所定义的模型,分别对应数据表auth_user和 auth_user_groups。
注册模型到Admin系统
我们开发业务系统的时候,会定义很多的业务模型,我们可以把模型注册到Admin系统,让Admin系统帮我们维护这些模型。也就是在Admin后台自动给模型实现增删改查功能。
注册模型到Admin系统有两个方式,我们都来演示下:
方式一,直接将模型注册到admin后台,以BookTypeInfo模型为例
打开admin.py
from django.contrib import adminfrom helloWorld.models import BookTypeInfo# Register your models here.
# 方法一,将模型直接注册到admin后台
admin.site.register(BookTypeInfo)
方式二:自定义类,继承ModelAdmin,以BookInfo为例
@admin.register(BookInfo)
class BookInfoAdmin(admin.ModelAdmin):# 设置显示字段list_display = ('id', 'bookName', 'price', 'publishDate', 'bookType')
我们可以点进ModelAdmin类里看下,我们可以对模型的增删改查操作做精细化的配置,包括显示字段,分页,可编辑字段,查询字段,排序等。
Admin后台就多了图书信息
我们同样可以对图书信息做增删改查操作;
再加亿点点功能:
class BookInfoAdmin(admin.ModelAdmin):# 设置显示字段list_display = ['id', 'bookName', 'price', 'publishDate', 'bookType']search_fields = ['bookName', 'price']list_filter = ('bookType', 'publishDate')list_per_page = 10list_editable = ('bookName', 'price', 'publishDate', 'bookType')fieldsets = (('基本信息', {'fields': ('bookName', 'price', 'publishDate')}),('高级信息', {'fields': ('bookType',)}),)
具体设置可以看Django定制Admin页面详细实例(展示页面和编辑页面)
内置Admin系统自定义设置
更改app模块名、title、header、index。
内置Admin系统二次开发
前面我们体验了Admin系统,以及模型注册,自定义设置。但是依然满足不了我们实际的业务开发需求。接下来,我们来讲下更细致的Admin系统二次开发。
创建一个普通管理员账户
首先我们在Admin后台系统里新建一个普通管理员账号。
认证和授权的用户右侧点击“新增”
勾选“职员状态”
这样我们就可以用ikun这个用户登录系统了。
设置不可编辑字段 get_readonly_fields()
业务开发时,有时候一些敏感字段,我们不允许普通管理员修改。我们可以通过重写ModelAdmin的get_readonly_fields()方法实现;
def get_readonly_fields(self, request, obj=None):if request.user.is_superuser:return []else:return [ 'price', 'bookType']
可以看到这里只有价格和种类能修改了。
这里我们同时也发现,字段label名称是英文BookName,原因是我们没有设置属性字段的verbose_name
我们可以在models.py里,加下verbose_name配置即可;
可以看到字段都变为中文名称了。
当然还有很多细粒度设置的方法,如下
formfield_for_foreignkey() 设置外键下拉框过滤筛选
formfield_for_foreignkey() 重写外键下拉框数据,比如增加下拉选项。
save_model() 添加或者修改处理逻辑重写 ,可以增加一些日志等处理。
等等…
自定义Admin模版
Admin后台管理系统的模版文件和Django框架内置提供的,我们可以在源码里找到。
具体位置在django -> contrib -> admin -> templates 下
很多时候我们需要修改默认的模版,包括程序功能,样式等,来达到业务需求。
我们可以直接修改源码里的模版,但是这种方式不好,如果一台机器有多个项目,会影响其他项目使用。
我们提倡在项目的模块项目的templates下,通过优先级来实现修改模版。
具体方式如下:
模块项目(比如我们这是helloWorld项目)的templates下,新建admin目录,然后admin目录下创建你需要覆盖的模版名称。
比如我们覆盖下修改的模版change_form.html
总结
本章学习了内置的Admin系统的用法,总的来说比自己手写要快要方便很多。