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. 电商平台物流模块自建OR对接第三方物流平台

    ​ 前沿 近几年来,电商行业竞争变得愈加激烈,公域流量获客成本越来越高,电商平台规则也越来越严格,数据无法出塔,商家无法自主运营用户群等等原因,很多大品牌纷纷开始搭建自有商城,运营私域流量,以此来降低 ...

  2. UE4自动打包工具编写

    在UE的开发中,有些项目需要针对不同版本出不同的包,并有一个对应的GUI界面,供大家使用. 1.插件编写 先使用UE4自己的插件模板创建插件,做成插件形式 然后注册Slate UI,编写打开逻辑.并在 ...

  3. Java 多线程:锁(一)

    Java 多线程:锁(一) 作者:Grey 原文地址: 博客园:Java 多线程:锁(一) CSDN:Java 多线程:锁(一) CAS 比较与交换的意思 举个例子,内存有个值是 3,如果用 Java ...

  4. Kubernetes里的Service是如何工作的

    Service是Kubernetes接入层的一种抽象资源,它为我们提供了一种固定的.统一的访问接口地址和负载均衡能力,这时可能会想到,当时使用docker-compose的时候,不存在Service概 ...

  5. 不要舔 Switch 游戏卡,单性生殖,永久夏令时

    文章转载自:https://mp.weixin.qq.com/s/8EikwCvZgKt2TFsld-nKSA

  6. filebeat中增加其他参数用来区分不同的日志来源示例

    filebeat.yml配置文件参数 在source里加入了一个fields叫做"appach: true". filebeat.inputs: - type: log enabl ...

  7. Docker 容器日志管理

    Docker 日志分为两类: Docker 引擎日志(也就是 dockerd 运行时的日志), 容器的日志,容器内的服务产生的日志. 一 .Docker 引擎日志 Docker 引擎日志一般是交给了 ...

  8. windows系统下使用bat脚本文件设置MySQL系统环境变量

    说明:在一个bat文件中设置tomcat环境变量后,不能直接使用,需要另起一个bat文件才能使用 号开头的行不要写在bat文件中 # 这个bat文件实现的功能:设置环境变量 @echo off set ...

  9. 2022美团Java后端开发春招实习面经

    2022美团Java后端开发春招实习面经 一面 1.讲一下计算机网络的五层架构,每层分别有什么协议 ​ 五层架构:应用层.运输层.网络层.数据链路层.物理层 ​ 2.什么是 Http 协议,各种 Ht ...

  10. Flask 框架:运用Echarts绘制图形

    echarts是百度推出的一款开源的基于JavaScript的可视化图表库,该开发库目前发展非常不错,且支持各类图形的绘制可定制程度高,Echarts绘图库同样可以与Flask结合,前台使用echar ...