13.django-admin组件
Django内置了一个强大的组件叫Admin,提供给网站管理员快速开发运营后台的管理站点,下面通过案例进行操作
1.创建模型类
模型类如下:
from django.db import models # Create your models here. class Classes(models.Model):
""" 班级表 """
title = models.CharField(max_length=32, verbose_name='班级名称') def __str__(self):
return self.title class Students(models.Model):
""" 学生表 """
username = models.CharField(max_length=128, default=None, null=True, verbose_name='学生姓名')
mobile = models.CharField(max_length=32, null=True, unique=True, verbose_name='手机号', help_text='手机号')
wxchat = models.CharField(max_length=100, null=True, unique=True, verbose_name='微信', help_text='微信')
qq_number = models.CharField(max_length=16, null=True, unique=True, verbose_name='QQ', help_text='QQ')
nickname = models.CharField(max_length=128, default=None, null=True, verbose_name='昵称')
age = models.SmallIntegerField(verbose_name='年龄')
email = models.CharField(max_length=128, default=None, null=True, verbose_name='邮箱')
en_date = models.DateField(verbose_name='入学日期')
addr = models.CharField(max_length=32, default=None, null=True, verbose_name='地址')
to_classes = models.ForeignKey('Classes', default=1, verbose_name='所属班级', on_delete=models.CASCADE) def __str__(self):
return self.username
生成数据库表
python manage.py makemigrations
python manage.py migrate
2. 使用脚本生成测试数据
在项目根目录下创建test.py脚本如下:
import os
import django
import random
import faker # pip install faker os.environ.setdefault("DJANGO_SETTINGS_MODULE", "adminStudy.settings") # MB:项目名称
django.setup() from student import models fk = faker.Faker(locale='zh_CN') def create():
models.Classes.objects.bulk_create((models.Classes(i, random.randrange(100, 500)) for i in range(10)))
gen = (
models.Students(
i,
fk.name(),
fk.phone_number(),
fk.phone_number(),
fk.phone_number(),
fk.user_name(),
random.randrange(15, 20),
fk.email(),
fk.date(),
fk.city_name(),
random.randrange(0, 9)
) for i in range(1, 1001)
)
models.Students.objects.bulk_create(gen) if __name__ == '__main__':
create()
3. 创建超级管理员
命令
python manage.py createsuperuser # 创建管理员命令

4. 使用管理员登录
django项目默认帮助我们生成管理员登录路由了
urlpatterns = [
path('admin/', admin.site.urls),
]
我们在浏览器中输入地址
http://127.0.0.1:8080/admin/login/
登录页面如下

使用用户名和密码登录,页面如下

5.将我们的模型类纳入admin管理
在子项目的admin中写入如下代码
from django.contrib import admin
from student import models class StudentModelAdmin(admin.ModelAdmin): # 必须继承 admin.ModelAdmin
pass @admin.register(models.Classes) # 或者使用装饰器进行注册
class ClassesModelAdmin(admin.ModelAdmin):
pass
再次访问页面如下

6.中文显示
我们希望将系统语言,项目名称和表名称都换成指定中文
- 系统语言,设置settings.py
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans' - 项目名称,设置子项目的apps.py文件
from django.apps import AppConfig class StudentConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'student'
verbose_name = "学生信息管理" - 表名称,设置模型类如下
from django.db import models # Create your models here. class Classes(models.Model):
""" 班级表 """
title = models.CharField(max_length=32, verbose_name='班级名称') def __str__(self):
return self.title class Meta:
verbose_name = '班级'
verbose_name_plural = '班级' class Students(models.Model):
""" 学生表 """
username = models.CharField(max_length=128, default=None, null=True, verbose_name='学生姓名')
mobile = models.CharField(max_length=32, null=True, unique=True, verbose_name='手机号', help_text='手机号')
wxchat = models.CharField(max_length=100, null=True, unique=True, verbose_name='微信', help_text='微信')
qq_number = models.CharField(max_length=16, null=True, unique=True, verbose_name='QQ', help_text='QQ')
nickname = models.CharField(max_length=128, default=None, null=True, verbose_name='昵称')
age = models.SmallIntegerField(verbose_name='年龄')
email = models.CharField(max_length=128, default=None, null=True, verbose_name='邮箱')
en_date = models.DateField(verbose_name='入学日期')
addr = models.CharField(max_length=32, default=None, null=True, verbose_name='地址')
to_classes = models.ForeignKey('Classes', default=1, verbose_name='所属班级', on_delete=models.CASCADE) def __str__(self):
return self.username class Meta:
verbose_name = '学生'
verbose_name_plural = '学生'
此时页面如下

7.表显设置
我们可以很大程度上自定义设置页面显示内容,官网:https://docs.djangoproject.com/en/2.1/ref/contrib/admin/
一开始,学生表的显示如下,非常单调且不友好

完善如下:
添加班级时,可以通过设置inlines字段同时为该班级添加一些学生,因为学生表ForeignKey的班级表。
actions即在列表页,可操作的一些功能,它默认实现了一个删除操作:
1 from django.contrib import admin
2 from student import models
3
4
5 class StudentModelAdmin(admin.ModelAdmin): # 必须继承 admin.ModelAdmin
6 """ 用户模型管理类,用于在admin后台对Students模型类进行扩展 """
7 list_per_page = 20 # 列表页每页展示数据的条数控制
8 # 在列表页展示哪些字段
9 list_display = ['id', 'username', 'age', 'email', 'mobile', 'nickname', 'to_classes']
10 # 设置点击指定字段跳转到编辑页面
11 list_display_links = ['id', 'username', 'age']
12 # 默认是以id进行排序,你也可以通过ordering,设置指定字段排序
13 # ordering = ['-age'] # ['age']: 升序; ['-age']: 降序
14 ordering = ['-age', 'id'] # 年龄相同的,就按照id升序排序
15 actions_on_top = True # 上方操作栏是否显示,False表示隐藏
16 # actions_on_bottom = True # 下方操作栏是否显示,False表示隐藏
17 list_filter = ['to_classes', 'age', 'en_date'] # 过滤器,按指定字段进行筛选过滤, 可以写多个过滤器,在右侧展示
18 search_fields = ['username', 'nickname'] # 指定字段搜索
19 # 注意,要编辑的字段必须在list_display中,但是也必须不在list_display_links中
20 # list_editable = ['email', 'mobile']
21 # date_hierarchy = "en_date" # 按照入学时间不同,可以进行过滤,在上方展示,这个筛选必须是日期时间相关的字段
22
23 def my_edit(self, request, queryset):
24 """ 将选中的记录,年龄设置为10 """
25 print(request.POST.getlist("_selected_action")) # ['5', '12']
26 pk_list = request.POST.getlist("_selected_action")
27 models.Students.objects.filter(pk__in=pk_list).update(age=10)
28
29 my_edit.short_description = "自定义编辑功能"
30
31 def my_edit2(self, request, queryset):
32 """ 将选中的记录,年龄设置为10 """
33 print(request.POST.getlist("_selected_action")) # ['5', '12']
34 pk_list = request.POST.getlist("_selected_action")
35 models.Students.objects.filter(pk__in=pk_list).update(age=10)
36
37 my_edit.short_description = "自定义编辑功能2"
38 actions = [my_edit,my_edit2]
39 admin.site.register(models.Students, StudentModelAdmin) # 必须进行注册
40
41
42 @admin.register(models.Classes) # 或者使用装饰器进行注册
43 class ClassesModelAdmin(admin.ModelAdmin):
44 class StudentInline(admin.StackedInline): # 必须这么继承,当然这个类也可以写在ClassesModelAdmin外面
45 """
46 这两个就样式不同而已
47 admin.StackedInline: 竖着
48 admin.TabularInline: 横着
49 """
50 extra = 1 # 默认一次性添加几条记录
51 model = models.Students
52
53 inlines = [StudentInline]
显示效果

8.simple-ui:美化页面
详细请见:https://simpleui.72wo.com/docs/simpleui/
安装:
pip install django-simpleui
配置
INSTALLED_APPS = [
'simpleui',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
...
]
页面如下

13.django-admin组件的更多相关文章
- 自定义 Django admin 组件
摘要:学习 Django admin 组件,仿照源码的逻辑,自定义了一个简易的 stark 组件,实现类似 admin 的功能. 可自动生成 url 路由,对于model 有与之相应的配置类对象,可进 ...
- Django admin组件使用
ADMIN 组件 介绍 admin 组件实现了更方便的WEB后台数据管理方式 settings.py 中第一个组件就是 : INSTALLED_APPS = [ 'django.contrib.adm ...
- Django admin 组件 原理分析与扩展使用 之 sites.py (一)
一 . 前言 Django 提供了admin 组件 为项目提供基本的管理后台功能(对数据表的增删改查). 本篇文章通过 admin源码 简单分析admin 内部原理 ,扩展使用方式,为以后进行定制和自 ...
- Django admin组件源码流程
admin 组件 Django 自带的用户后台组件 用于用户便携的操作 admin 组件核心 启动 注册 设计url 启动核心代码 每个app 通过 apps.py 扫描 admin.py 文件 并执 ...
- Django——admin组件
Django提供了基于web的管理工具. Django自动管理工具是django.contrib的一部分.你可以在项目的settings.py中的INSTALLED_APPS看到它: # Applic ...
- day 82 Django Admin组件.
一.先建表环境 modules文件 from django.db import models # Create your models here. from django.contrib.auth.m ...
- python框架之Django(13)-admin组件
使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTALLED_APPS ...
- django第13天(auth组件,forms组件,中间件,csrf)
django第13天(auth组件,forms组件) auth组件 -auth组件 -auth是什么? -django内置的用户认证系统,可以快速的实现,登录,注销,修改密码.... -怎么用? -( ...
- django之admin组件
一.面向对象复习 1.类的继承 class Base(object): def __init__(self,val): self.val = val def func(self): self.test ...
- Django 之 admin组件使用&源码解析
admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.可以在项目的 settings.py 中的 INSTALLED ...
随机推荐
- 如何结合整洁架构和MVP模式提升前端开发体验(三) - 项目工程化配置、规范篇
工程化配置 还是开发体验的问题,跟开发体验有关的项目配置无非就是使用 eslint.prettier.stylelint 统一代码风格. formatting and lint eslint.pret ...
- 第一篇博客:HTML:background的使用
开篇 我是一名程序员小白,这是我写的第一篇博客,在学习的路上难免会遇到难以解决的问题,我将会在这里写下我遇到的问题并附上解决方法 希望可以对各位有所帮助!! 我们在html中经常会遇到这样的问题 例如 ...
- 快速排序C语言版图文详解
算法原理:选一个数位基准,将序列分成两个部分,一边全是比它小序列,另一边全是比它大序列.然后再分别对比他小的序列和比再次进行基准分割.依次分割下去,得到一个有序的队列. 原理图示: 编辑 编辑 ...
- vue3+three.js实现疫情可视化
前言 自成都九月份以来疫情原因被封了一两周,居家着实无聊,每天都是盯着微信公众号发布的疫情数据看,那种页面,就我一个前端仔来说,看着是真的丑啊!(⊙_⊙)?既然丑,那就自己动手开整!项目是2022.9 ...
- Django 目录
1 Python Web开发主流框架 2 Django 简介和版本介绍 3 Django 使用cmd 创建工程 4 Django 创建 APP和目录结构介绍 5 Django 使用VScode 创建工 ...
- flannel跨主网络通信方案(UDP、VXLAN、HOST-GW)详解
- Minio服务限制/租户
官方文档地址:http://docs.minio.org.cn/docs/master/minio-server-limits-per-tenant 纠删码 (多块硬盘 / 服务) 浏览器访问 Lim ...
- 安装ceph (快速) 步骤三: Ceph 客户端
大多数 Ceph 用户不会直接往 Ceph 存储集群里存储对象,他们通常会使用 Ceph 块设备. Ceph 文件系统.或 Ceph 对象存储这三大功能中的一个或多个. 前提条件 先完成存储集群快速入 ...
- Logstash:如何处理 Logstash pipeline 错误信息
转载自:https://elasticstack.blog.csdn.net/article/details/114290663 在我们使用 Logstash 的时候经常会出现一些错误.比如当我们使用 ...
- 右击存放项目的文件夹出现 open with Visual Studio Code 的打开方式
最终效果 步骤1: 找到 Visual Studio Code 的安装位置 (右击桌面Visual Studio Code 图标-->属性-->打开文件夹所在位置) 新建一个可以编辑的 c ...
