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. 巧用KingbaseES中的动态DDL

    概述 :在DBA的日常工作中,经常遇到一些需要基于数据库当前状态的实用程序查询的实例.比如一个逻辑复制的目标表,主键ID列与生成数据的序列不同步,这将导致插入新行是,会有主键冲突.要纠正这个问题,需要 ...

  2. go 中解析JSON的三种姿势

    背景 这是一篇写给0-1年新人的文章,短平快的教会你如何解析json字符串. 示例Json 假设有如下json字符串: { "userName":"admin" ...

  3. Windows SMTP服务器的中继列表

    今天在一台Windows 2019的SMTP服务器上想增加一个匿名中继的客户端地址.登录到服务器后发现原来的设置丢失了,而且原来的允许列表也不见了.界面变成了这样. https://www.cnblo ...

  4. 第六章:Django 综合篇 - 8:信号 signal

    django自带一套信号机制来帮助我们在框架的不同位置之间传递信息.也就是说,当某一事件发生时,信号系统可以允许一个或多个发送者(senders)将通知或信号(signals)发送给一组接受者(rec ...

  5. 使用ConfigMap配置您的应用程序

    转载自:https://kuboard.cn/learning/k8s-intermediate/config/config-map.html ConfigMap 作为 Kubernetes API ...

  6. 配置logstash消费kafka多个topic,分别生成索引

    filebeat配置多个topic #filebeat.prospectors: filebeat.inputs: - input_type: log encoding: GB2312 # field ...

  7. 使用python连接elasticsearch

    官方文档地址:https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/overview.html 安装的时候注意 ...

  8. 6. EFK:免费的日志采集与可视化搜索套件

    收集日志是为了做进一步的分析.收集是第一步,收集到日志后还需要进行存储.索引,以便进行快速查询分析.我们还需要一个友好的查询界面,来方便用户使用日志. 本文介绍一个免费的开源软件组合,正好可以实现上述 ...

  9. ofd格式文件转换成pdf格式的方法

    ofd格式文件很多人还比较陌生,很多人接收到文件都不知如何打开阅读,把文件发给对方,还需要对方安装个专门的阅读软件,我们还有另一个办法,就是将OFD文件转换为PDF格式文件,然后把PDF格式文件发给对 ...

  10. [题解] Atcoder Regular Contest ARC 148 A B C E 题解

    点我看题 题目质量一言难尽(至少对我来说 所以我不写D的题解了 A - mod M 发现如果把M选成2,就可以把答案压到至多2.所以答案只能是1或2,只要判断答案能不能是1即可.如果答案是1,那么M必 ...