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组件的更多相关文章

  1. 自定义 Django admin 组件

    摘要:学习 Django admin 组件,仿照源码的逻辑,自定义了一个简易的 stark 组件,实现类似 admin 的功能. 可自动生成 url 路由,对于model 有与之相应的配置类对象,可进 ...

  2. Django admin组件使用

    ADMIN 组件 介绍 admin 组件实现了更方便的WEB后台数据管理方式 settings.py 中第一个组件就是 : INSTALLED_APPS = [ 'django.contrib.adm ...

  3. Django admin 组件 原理分析与扩展使用 之 sites.py (一)

    一 . 前言 Django 提供了admin 组件 为项目提供基本的管理后台功能(对数据表的增删改查). 本篇文章通过 admin源码 简单分析admin 内部原理 ,扩展使用方式,为以后进行定制和自 ...

  4. Django admin组件源码流程

    admin 组件 Django 自带的用户后台组件 用于用户便携的操作 admin 组件核心 启动 注册 设计url 启动核心代码 每个app 通过 apps.py 扫描 admin.py 文件 并执 ...

  5. Django——admin组件

    Django提供了基于web的管理工具. Django自动管理工具是django.contrib的一部分.你可以在项目的settings.py中的INSTALLED_APPS看到它: # Applic ...

  6. day 82 Django Admin组件.

    一.先建表环境 modules文件 from django.db import models # Create your models here. from django.contrib.auth.m ...

  7. python框架之Django(13)-admin组件

    使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTALLED_APPS ...

  8. django第13天(auth组件,forms组件,中间件,csrf)

    django第13天(auth组件,forms组件) auth组件 -auth组件 -auth是什么? -django内置的用户认证系统,可以快速的实现,登录,注销,修改密码.... -怎么用? -( ...

  9. django之admin组件

    一.面向对象复习 1.类的继承 class Base(object): def __init__(self,val): self.val = val def func(self): self.test ...

  10. Django 之 admin组件使用&源码解析

    admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.可以在项目的 settings.py 中的 INSTALLED ...

随机推荐

  1. 【题解笔记】PTA基础6-10:阶乘计算升级版

    题目地址:https://pintia.cn/problem-sets/14/problems/742 前言 咱目前还只能说是个小白,写题解是为了后面自己能够回顾.如果有哪些写错的/能优化的地方,也请 ...

  2. 【面试题】js实现将excel表格copy到页面

    js实现将excel表格copy到页面 点击打开视频讲解更加详细 其实最核心的技术,还是copy的是我们粘贴板上的数据 就像平常怎么粘贴复制其他的数据一样,只是我们在excel粘贴的是一个表格数据 这 ...

  3. Karmada v1.3:更优雅 更精准 更高效

    摘要:最新发布的1.3版本中,Karmada重新设计了应用跨集群故障迁移功能,实现了基于污点的故障驱逐机制,并提供平滑的故障迁移过程,可以有效保障服务迁移过程的连续性(不断服). 本文分享自华为云社区 ...

  4. 进阶:spring-bean生命周期流程

    Bean的生成过程 主要流程图 1. 生成BeanDefinition Spring启动的时候会进行扫描,会先调用org.springframework.context.annotation.Clas ...

  5. [机器学习]-分类问题常用评价指标、混淆矩阵及ROC曲线绘制方法

    分类问题 分类问题是人工智能领域中最常见的一类问题之一,掌握合适的评价指标,对模型进行恰当的评价,是至关重要的. 同样地,分割问题是像素级别的分类,除了mAcc.mIoU之外,也可以采用分类问题的一些 ...

  6. G&GH05 删除文件和.gitignore

    注意事项与声明 平台: Windows 10 作者: JamesNULLiu 邮箱: jamesnulliu@outlook.com 博客: https://www.cnblogs.com/james ...

  7. Elasticsearch:Elasticsearch HQ 介绍

  8. Portainer 基本功能介紹之升級映像檔並更新 Container

    文档地址:https://www.asustor.com/zh-tw/online/College_topic?topic=145#dpt7

  9. Django环境安装

    1.安装Django # 自动安装PyPi提供的最新版本 pip install django # 安装指定版本 pip install django==2.2 # 验证安装 >>> ...

  10. Dockerfile文件中的ENTRYPOINT,CMD命令跟k8s中command,args之间的关系