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. ORA-12541:tns:no listener

    打开任务管理器,查看服务,看箭头所指的三个服务是否开启即可

  2. get、put、post、delete含义与区别

    1.GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改.增加数据,不会影响资源的内容,即该请求不会产生副作用.无论进行多少次操 ...

  3. Java8新特性----Stream

    Stream Stream 是用函数式编程方式在集合类上进行复杂操作的工具. 一)常用的流操作 惰性求值方法:只描述Stream,最终不产生新集合的方法(返回的还是Stream). 及早求值方法:最终 ...

  4. (转)RBAC权限模型——项目实战

    一.前言 权限一句话来理解就是对资源的控制,对web应用来说就是对url的控制,关于权限可以毫不客气的说几乎每个系统都会包含,只不过不同系统关于权限的应用复杂程序不一样而已,现在我们在用的权限模型基本 ...

  5. JavaScript(三)

    函数 函数就是重复执行的代码片. 函数定义与执行 <script type="text/javascript"> // 函数定义 function aa(){ aler ...

  6. jquery for循环判断是否重复

    //使用for循环 判断是否有重名 var len=$("li").length;//获取页面中所有li的数量 for(var i=0; i<len; i++){ oldna ...

  7. SpringMVC的坑

    The request sent by the client was syntactically incorrect. 这个错误的原因是 因为 提交的表单数据和目标方法的入参不一致所导致   然后我就 ...

  8. python +ps 三方面库整理

    -------------------------------------------端口进程相关------------------------------------------------cp ...

  9. PHP算法学习(4) 随机算法

    svn地址:svn://gitee.com/zxadmin/live_z <?php /* * 随机数算法 * 伪随机数 根据分布概率 */ final class Random { /* * ...

  10. uc/os iii移植到STM32F4---IAR开发环境

    也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...