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. django中models field详解

    本文参考自:django官方文档models/field 在model中添加字段的格式一般为:  field_name = field_type(**field_options) 一  field o ...

  2. SDOI2018:荣誉称号

    题解: https://files.cnblogs.com/files/clrs97/title-solution.pdf Code: #include<cstdio> #include& ...

  3. HTML入门6

    这篇将简单会编写网页整体网站架构,通过HTML来表示网站结构. 标题<header>,通常顶部有个大标题或图标,是网站的主要常见信息,存在于每个网页 导航<nav>,通常包含菜 ...

  4. vue全选反选demo

    <template> <div> <div class="xuanze"> <label><input type=" ...

  5. STL--set_difference

    set_difference(),作用是求两个集合的差.即求A-B(属于A但不属于B的元素) set_difference()算法计算两个集合[start1, end1)和[start2, end2) ...

  6. spring boot application.properties 属性详解

    2019年3月21日17:09:59 英文原版: https://docs.spring.io/spring-boot/docs/current/reference/html/common-appli ...

  7. php composer windows安装

    2018年6月22日10:40:49 笔记 1.先下载Composer-Setup.exe,下载地址:http://docs.phpcomposer.com/00-intro.html#Install ...

  8. stm32直流电机驱动与测速代码配套视频资料

    说实话就现在的市场应用中stm32已经占到了绝对住到的地位,51已经成为过去式,32的功能更加强大,虽然相应的难度有所增加,但是依然阻止不了大家学习32的脚步,不说大话了这些大家都懂要不然也不会学习s ...

  9. 关于HTTP协议学习(一)

    一,目录结构 B/S 结构定义 URI (统一资源标志符) HTTP 协议 HTTP 请求报文 HTTP 响应报文 HTTP Methods HTTP Status Code 二,B/S,C/S 结构 ...

  10. [dev] udp socket的read长度问题

    场景描述 我的两个程序需要彼此通信.采用unix socket来实现. 并为了简单起见使用了DGRAM,也就是udp通信. 问题描述 1. 用法是这样的 收包的一端使用epoll监听,发包端发送一个2 ...