Django框架详细介绍---Admin后台管理
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后台管理的更多相关文章
- 第三百七十八节,Django+Xadmin打造上线标准的在线教育平台—django自带的admin后台管理介绍
第三百七十八节,Django+Xadmin打造上线标准的在线教育平台—django自带的admin后台管理介绍 配置django的admin数据库管理后台 首先urls.py配置数据库后台路由映射,一 ...
- Django学习:创建admin后台管理站点
Django自带一个后台管理站点,方便我们管理数据.这个界面只给管理员使用,并不对大众开放. 创建管理员用户 py manage.py createsuperuser 如下图所示: 用户名不填的话,默 ...
- Django框架详细介绍---模型---ORM
一.概述 ORM(Object Relational Mapping),全称:对象关系映射,简单的说就是通过创建类.实例化出对象的方法,使得类.对象.对象的属性能够和数据库中的表.记录.字段意义对应. ...
- Django模型中的admin后台管理无法显示字段
在执行django后台管理时,登陆到http://127.0.0.1:8000/admin/,进入页面后没有对应的字段显示.请解决? 代码: models.py from django.db impo ...
- Django(66)admin后台管理注册用户
前言 我们使用django创建用户可以使用注册接口的方式,也可以使用django自带的后台管理系统,这里就介绍使用后台管理系统创建用户 admin后台管理系统 在使用之前我们可以使用第三方的插件,来美 ...
- Django框架详细介绍---中间件(认证)
一.绪论 在cookie和session的应用中,通过在视图函数内添加装饰器判断用户是否登录,把没有登录的用户请求跳转到登录页面,通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可 ...
- Django框架详细介绍---cookie、session、自定义分页
1.cookie 在HTTP协议介绍中提到,该协议是无状态的,也就是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的 ...
- Django框架详细介绍---认证系统
在web开发中通常设计网站的登录认证.注册等功能,Django恰好内置了功能完善的用户认证系统 1.auth模块 from django.contrib import auth 模块源码 import ...
- Django框架详细介绍---request对象
几个重要的函数 1.HttpRequest.get_host() 根据从HTTP_X_FORWARDED_HOST(如果打开 USE_X_FORWARDED_HOST,默认为False和 HTTP_H ...
随机推荐
- Typescript高级类型与泛型难点详解
最近做的TS分享,到了高级类型这一块.通过琢磨和实验还是挖掘出了一些深层的东西,在此处做一下记录,也分享给各位热爱前端的小伙伴. 其实在学习TS之前就要明确以下几点: 1. typescrip ...
- 最优装载—dp
最优装载—dp 动态规划 一 问题描述 二 问题分析 三 代码实现 package dp_Loading; import java.io.BufferedWriter; import java.io. ...
- 小甲鱼Python第十九讲课后习题
笔记: 1.内嵌函数:函数内部新创建另一个函数 2.闭包:函数式编程的重要语法,如果在一个内部函数里,对外部作用域(但不是在全局作用域的变量)进行引用,那么内部函数就会被认为是闭包. 3.nonloc ...
- VSCode+Xdebug断点调试PHP(全攻略)
一直都想把php断电调试记录下来,由于拖延症极其严重导致现在才写. 好了,刚去猛喝了几碗心灵鸡汤,趁着这股劲把"Visual Studio Code如何使用XDebug进行php断点调试&q ...
- CUDA相关问题
之前装了GPU驱动后,再装了CUDA 9.0,再装了cuDNN,并且对样例mnistCUDNN进行执行,显示“Test passed!"通过.但是倒忘了有没有测试CUDA是否安装成功.驱动也 ...
- openlayers应用原理
1.数据组织 OpenLayers通过同层(Layer)进行组织渲染,然后通过数据源设置具体的地图数据来源.因此,Layer与Source是密切相关的对应关系,缺一不可.Layer可看做渲染地图的层容 ...
- C++中的Public 、Private、Protected 区别
第一: private,public,protected的访问范围: private: 只能由该类的成员函数.友元的成员函数访问,不能被其他类的成员函数访问,即使是该类的对象也不能直接访问 publi ...
- rest_framework 跨域和CORS
跨域和CORS 本节目录 一 跨域 二 CORS 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 跨域 同源策略(Same origin policy)是一种约定, ...
- Spring IOC原理解读 面试必读
Spring源码解析:Bean实例的创建与初始化 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. IoC容器 ...
- 栈->栈的基本定义
定义: 栈是限定仅在表尾进行插入或删除操作的线性表.因此,对栈来说,表尾端有特殊含义,称为栈顶,相应地,表头端称为栈底.不含元素的空表成为空栈. 示意图: 顺序栈的表示和实现 可以在初始化时分配一块连 ...