1.Admin组件使用

  Django内集成了web管理工具,Django在启动过程中会执行setting.py文件,初始化Django内置组件、注册APP、添加环境变量等

# Application definition

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app.apps.AppConfig',
]

示例:

  激活管理工具,并将数据模型注册到admin便可以进行增删查改

  1)激活(默认在生成项目时激活)

from django.contrib import admin
from django.urls import path urlpatterns = [
path('admin/', admin.site.urls),
]

  2)注册

  通过 python manage.py createsuperuser 创建超级用户,将准备好的数据模型注册到admin,启动服务之后通过http://127.0.0.1:8000/admin访问登录(本地管理测试)

from django.db import models

# Create your models here.
from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser):
"""
用户信息表
"""
nid = models.AutoField(primary_key=True)
phone = models.CharField(max_length=11,
null=True,
unique=True) def __str__(self):
return self.username class Meta:
verbose_name = "用户信息"
verbose_name_plural = verbose_name class Author(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField() def __str__(self):
return self.name class Publish(models.Model):
name = models.CharField(max_length=32)
email = models.EmailField() def __str__(self):
return self.name class Book(models.Model):
title = models.CharField(max_length=32)
publishDate = models.DateField()
price = models.DecimalField(max_digits=5, decimal_places=2) publisher = models.ForeignKey(to="Publish", on_delete=models.CASCADE)
authors = models.ManyToManyField(to='Author') def __str__(self):
return self.title

models数据模型

  3)admin定制

  在admin.py中注册models中相应的类,即可通过管理工具进行增删查改

# 方式一:
class User_admin(admin.ModelAdmin):
list_display = ("username",) # 第一个参数可传入列表,实现多个数据模型的注册
admin.site.register(models.UserInfo, User_admin) # 方式二:
@admin.register(models.UserInfo)
class User_admin(admin.ModelAdmin):
list_display = ("username",)

2.可在ModelAdmin中定制其它功能

  1)list_diapaly,定制显示的列

class User_admin(admin.ModelAdmin):
list_display = ("username",) # 第一个参数可传入列表,实现多个数据模型的注册
admin.site.register(models.UserInfo, User_admin)

  2)list_display_links,定制列可以跳转

class Publisher_admin(admin.ModelAdmin):
list_display = ("name", "email")
list_display_links = ["name", "email",] admin.site.register(models.Publish, Publisher_admin)

  3)其它定制方法

list_filter              列表时,定制右侧快速筛选。
list_select_related         列表时,连表查询是否自动select_related
list_editable             列表时,可以编辑的列
search_fields             列表时,模糊搜索的功能
date_hierarchy            列表时,对Date和DateTime类型进行搜索
inlines                详细页面,如果有其他表和当前表做FK,那么详细页面可以进行动态增加和删除
action                 列表时,定制action中的操作 定制HTML模板
add_form_template = None
  change_form_template = None
  change_list_template = None
  delete_confirmation_template = None
  delete_selected_confirmation_template = None
  object_history_template = None raw_id_fields            详细页面,针对FK和M2M字段变成以Input框形式
fields                详细页面时,显示字段的字段
exclude                详细页面时,排除的字段
readonly_fields           详细页面时,只读字段
fieldsets               详细页面时,使用fieldsets标签对数据进行分割显示
详细页面时,M2M显示时,数据移动选择(方向:上下和左右)
  filter_vertical
  filter_horizontal
ordering                列表时,数据排序规则
radio_fields             详细页面时,使用radio显示选项(FK默认使用select)
form = ModelForm           用于定制用户请求时候表单验证
empty_value_display = "列数据为空时,显示默认值"

3.Admin源码解析

  1)单例模式

  Singleton Pattern,是一种常用的软件设计模式,主要确保相应的类只有一个实例存在,例如一个连接数据类,只需生成一个实例,在存在多个连接的情况下无需再生成多个实例,从而节省内存资源

  Python中实现单例的方式(详见面向对象章节):

  •     通过导入模块的方式
  •     使用__new__方法
  •     使用装饰器(decorator)
  •     使用元类(metaclass)

示例:

  通过模块导入,Python模块就是天然的单例模式,在模块第一次导入的时候,会生成.pyc文件,再次导入时会直接执行.pyc文件,而不会再次执行模块中的代码,即只在首次导入执行模块内代码,因此可将相关的函数或数据定义在指定模块中并将其导入便可得到一个单例

# mysingleton.py
class My_Singleton(object):
def func(self):
pass my_singleton = My_Singleton()

  将模块导入

from mysingleton import my_singleton

my_singleton.func()

  2)以将models数据模型中的类注册到Admin看执行流程

  待续

  

Django框架详细介绍---Admin后台管理的更多相关文章

  1. 第三百七十八节,Django+Xadmin打造上线标准的在线教育平台—django自带的admin后台管理介绍

    第三百七十八节,Django+Xadmin打造上线标准的在线教育平台—django自带的admin后台管理介绍 配置django的admin数据库管理后台 首先urls.py配置数据库后台路由映射,一 ...

  2. Django学习:创建admin后台管理站点

    Django自带一个后台管理站点,方便我们管理数据.这个界面只给管理员使用,并不对大众开放. 创建管理员用户 py manage.py createsuperuser 如下图所示: 用户名不填的话,默 ...

  3. Django框架详细介绍---模型---ORM

    一.概述 ORM(Object Relational Mapping),全称:对象关系映射,简单的说就是通过创建类.实例化出对象的方法,使得类.对象.对象的属性能够和数据库中的表.记录.字段意义对应. ...

  4. Django模型中的admin后台管理无法显示字段

    在执行django后台管理时,登陆到http://127.0.0.1:8000/admin/,进入页面后没有对应的字段显示.请解决? 代码: models.py from django.db impo ...

  5. Django(66)admin后台管理注册用户

    前言 我们使用django创建用户可以使用注册接口的方式,也可以使用django自带的后台管理系统,这里就介绍使用后台管理系统创建用户 admin后台管理系统 在使用之前我们可以使用第三方的插件,来美 ...

  6. Django框架详细介绍---中间件(认证)

    一.绪论 在cookie和session的应用中,通过在视图函数内添加装饰器判断用户是否登录,把没有登录的用户请求跳转到登录页面,通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可 ...

  7. Django框架详细介绍---cookie、session、自定义分页

    1.cookie 在HTTP协议介绍中提到,该协议是无状态的,也就是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的 ...

  8. Django框架详细介绍---认证系统

    在web开发中通常设计网站的登录认证.注册等功能,Django恰好内置了功能完善的用户认证系统 1.auth模块 from django.contrib import auth 模块源码 import ...

  9. Django框架详细介绍---request对象

    几个重要的函数 1.HttpRequest.get_host() 根据从HTTP_X_FORWARDED_HOST(如果打开 USE_X_FORWARDED_HOST,默认为False和 HTTP_H ...

随机推荐

  1. [Sublime]Sublime安装以及插件使用

    安装直接去官网下载安装了 安装Package Control关于安装Package Control,有两种方法. 一.自动安装 自动安装很方便,网上代码很多.我用的是Sublime Text3,通过V ...

  2. 为什么很多应用都安装在/usr/local目录下?

    首先,Linux的官方文档FHS对该目录的说明:http://www.linuxbase.org/betaspecs/fhs/fhs/ch04s09.html The /usr/local hiera ...

  3. struggle in the ACM(一)

    struggle in the ACM(一) 2018/11/3 成为一名ACMer以后,第一次参加ACM正式比赛,果然是打铁了~ 回想起整场比赛的前前后后,其实拿到现在这个成绩,真的是情理之中却也是 ...

  4. viewport的故事(一)

    部分翻译 自原文 https://www.quirksmode.org/mobile/viewports.html   概念:设备像素和CSS像素   设备像素可以通过 screen.width/he ...

  5. idea 常用快捷键

    =============intellij idea 快捷键============= ctrl+] 诸如{}围起来的代码块,使用该快捷键可以快速跳转至代码块的结尾处 ctrl+[ 同上,快速跳至代码 ...

  6. 英特尔神经棒使用入门-NCS2 & NCS1 -OpenVino

    |--背景: NCS1使用的NCSDK1和NCSDK2,速度一般,没有想象中的速度,能有TX2一半的速度吧.跟大佬又申请了个NCS2来试一试. 环境配置到跑通自己写的MNIST分类网络花了2天不到吧. ...

  7. laravel整合workerman做消息推送系统

    官方建议分离 workerman和mvc框架的结合,我去,这不是有点脑缺氧吗? 大量的业务逻辑,去独立增加方法和类库在写一次,实际业务中是不现实和不实际的 gateway增加一些这方面的工作,但是我看 ...

  8. 无法登陆mysql user用户

  9. flutter学习之二Material Design设计规范

    前言: 最近在自学flutter跨平台开发,从学习的过程来看真心感觉不是那么一件特别容易的事.不但要了解语法规则, 还要知晓常用控件,和一些扩展性的外延知识,所以套一句古人的话“路漫漫其修远矣,无将上 ...

  10. hashlib模块-加密的模块,加盐

    1.MD5加密 md5加密是不可逆的 print(dir(m)) #把变量的方法打印出来 hashlib.md5:加密xx.hexdigest():返回密文xx.encode:将字符串转成二进制的,转 ...