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. ESP8266 RTOS SDK开发

    ESP8266 RTOS SDK开发 目录 ESP8266 RTOS SDK开发 一.源码RTOS SDK包的下载和编译 二.固件烧录 1.管脚定义 三.程序例程 ## 1.PWM设置 连接MQTT ...

  2. 如何充分利用KingbaseES日志

    作为现代关系数据库中,KingbaseES带有许多用于微调的参数.需要考虑的领域之一是KingbaseES应该如何记录其活动.日志记录在Kingbases数据库管理中经常被忽略,如果不被忽略,通常会被 ...

  3. 【android 逆向】破解crackme0502

    1.首先将crackme0502 拖入模拟器.打开应用,随意输出字符串 2. 将APK 拖入AndroidKiller 反编译 3.先查看androidmanifest.xml <?xml ve ...

  4. python自动化测试系列教程

    随着互联网产品更新迭代加快,Web 开发和测试的需求也越来越大.很难想象,如果阿里的双 11.京东的 618,这些庞大繁杂的系统,由工程师们一个个手动测试,将会是一个怎样费时费力.成本巨大的工程. 也 ...

  5. DOS文档

  6. 践行初心|方正璞华爱心捐赠人脸识别测温系统WelComID

    近日,方正璞华向金鸡湖社区卫生服务中心捐赠了人脸识别测温系统.该设备集人员识别.体温检测等功能于一体,在人员进出的时候完成体温的检测,从而判断是否有异常人员等问题,有效节省人力成本.减少人员接触风险, ...

  7. 跟羽夏学 Ghidra ——引用

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...

  8. 云原生之旅 - 2)Docker 容器化你的应用

    前言 上文中我们用Golang写了一个HTTP server,本篇文章我们讲述如何容器化这个应用,为后续部署到kubernetes 做准备. 关键词:Docker, Containerization, ...

  9. 我的 Kafka 旅程 - Linux下的安装 & 基础命令

    准备工作 安装解压缩工具 tar # 检查是否安装了解压缩工具 tar yum list tar # 如未安装 tar yum install tar -y 安装必备的 java # 检查是否安装了 ...

  10. Elasticsearch:Index alias

    现在让我们来谈谈Elasticsearch最简单和最有用的功能之一:别名 (alias).为了区分这里alias和文章"Elasticsearch : alias数据类型",这里的 ...