admin组件,一旦我们注册了表以后,会自动生成很多url,那他是如何添加的呢,
因为admin在启动后会自动执行每个app下的ready方法:
具体是由

from django.utils.module_loading import autodiscover_modules
这个函数完成的。
def autodiscover():
autodiscover_modules('admin', register_to=site)
自动去所有app下 调用 admin
  • 创建一个组件:stark,

    • 在app.py里的配置编写ready方法:

      • 程序加载时,会去每个app下找stark.py,并加载
  • 在每个app下创建stark.py
    • 将表注册到stark中  

当然admin是写到了init里

----------> 在setting里只写app/一直写到配置类   是有区别的,后者执行ready方法

 

# models
# __all__ = ['tables1',] # admin
# from . import models
# for tables in models.__all__:
# admin.site.register(getattr(models,table))

  

1. 使用管理工具:

通过命令 python manage.py createsuperuser 来创建超级用户。

2. admin的定制:

方式一:
class UserAdmin(admin.ModelAdmin):
list_display = ('user', 'pwd',)
admin.site.register(models.UserInfo, UserAdmin) 方式二:
@admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin):
list_display = ('user', 'pwd',)
list_display = ["name", "pwd", "date", "xxx"]  # 显示的字段,不能显示多对多字段
list_display_links = ["pwd"] # 显示的字段哪些可以跳转
list_filter = ["pwd"] # 哪些可以筛选
list_select_related = [] # 连表查询是否自动select_related
list_editable = ["name"] # 可以编辑的列
search_fields = ["name"] # 模糊搜索的字段
date_hierarchy = "date" # 对Date和DateTime进行搜索 def add(self, request, queryset):
pass add.short_description = "在action框中显示的名称" actions = [add, ] # 定制action行为具体方法
actions_on_top = True # action框显示在上?
actions_on_bottom = False # action框显示在下?
actions_selection_counter = True # 是否显示选择个数

inlines,详细页面,如果有其他表和当前表做FK,那么详细页面可以进行动态增加和删除

class UserInfoInline(admin.StackedInline): # TabularInline
extra = 0
model = models.UserInfo class GroupAdminMode(admin.ModelAdmin):
list_display = ('id', 'title',)
inlines = [UserInfoInline, ]

10 定制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

11 raw_id_fields,详细页面,针对FK和M2M字段变成以Input框形式

raw_id_fields = ('FK字段', 'M2M字段',)

12  fields,详细页面时,显示字段的字段

fields = ('user',)

13 exclude,详细页面时,排除的字段

exclude = ('user',)

14  readonly_fields,详细页面时,只读字段

readonly_fields = ('user',)

15 fieldsets,详细页面时,使用fieldsets标签对数据进行分割显示

@admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin):
fieldsets = (
('基本数据', {
'fields': ('user', 'pwd', 'ctime',)
}),
('其他', {
'classes': ('collapse', 'wide', 'extrapretty'), # 'collapse','wide', 'extrapretty'
'fields': ('user', 'pwd'),
}),
)

16 详细页面时,M2M显示时,数据移动选择(方向:上下和左右)

filter_vertical = ("m2m字段",) # 或filter_horizontal = ("m2m字段",)

17 ordering,列表时,数据排序规则

ordering = ('-id',)

def get_ordering(self, request):
return ['-id', ]

18. radio_fields,详细页面时,使用radio显示选项(FK默认使用select)

radio_fields = {"ug": admin.VERTICAL} # 或admin.HORIZONTAL

19 form = ModelForm,用于定制用户请求时候表单验证

from app01 import models
from django.forms import ModelForm
from django.forms import fields class MyForm(ModelForm):
others = fields.CharField() class Meta:
model = models = models.UserInfo
fields = "__all__" @admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin): form = MyForm

20 empty_value_display = "列数据为空时,显示默认值"

@admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin):
empty_value_display = "列数据为空时,默认显示" list_display = ('user','pwd','up') def up(self,obj):
return obj.user
up.empty_value_display = "指定列数据为空时,默认显示"

二、单例模式

1. 使用 __new__

为了使类只能出现一个实例,我们可以使用 __new__ 来控制实例的创建过程,代码如下:

class Singleton(object):
_instance = None
def __new__(cls, *args, **kw):
if not cls._instance:
cls._instance = super(Singleton, cls).__new__(cls, *args, **kw)
return cls._instance class MyClass(Singleton):
a = 1

2. 使用模块

class My_Singleton(object):
x = 12
def foo(self):
print(self.x) my_singleton = My_Singleton() print('ok')

将上面的代码保存在文件 mysingleton.py 中,然后这样使用:

from mysingleton import my_singleton

my_singleton.foo()

知识点:
url()的使用:
path('yuan/',([path('test01/',test01)],None,None)), # yuan/test01
        path('yuan/',([
path('test01/',([
path('test04/',test04), # yuan/test01/test04
path('test05/',test05) # yuan/test01/test05
],None,None)),
path('test02/',test02), # yuan/test02
path('test03/',test03) # yuan/test03
],None,None))
    
注: re_path(r'^test04/',test04), # 以test04开头;
re_path(r'test04/',test04), # 包含test04;

django - 总结 - admin的更多相关文章

  1. [django]Django站点admin支持中文显示和输入设置

    正文: Django站点admin支持中文输入设置,操作如下: 1 需要确定的你的数据库的client客户端和服务端的编码设置为utf-8,如果不是,请将其设置成utf-8编码,我采用mysql,详情 ...

  2. Django之admin界面恢复及添加数据模型

    引自:http://fl0wjacky.github.io/jekyll_demo/2014/07/14/Django-admin.html Django之admin界面恢复及添加数据模型 Djang ...

  3. grappelli美化django的admin页面

    开始用admin时候,觉得它的页面实在...宁愿自己写modules,多费点时间 grappelli可以把admin变得非常美观,配置起来也很简单 第一步,先下载grappelli,搜索一下,wind ...

  4. django: db - admin

    本讲演示简单使用 Django Admin 功能. 一,修改 settings.py,添加 admin 应用: INSTALLED_APPS = ( 'django.contrib.auth', 'd ...

  5. django之admin流程

    admin 类复习: class Base(object): def __init__(self,val): self.val = val def func(self): self.test() pr ...

  6. Django的admin.py注册流程

    通常创建一个Django项目的时候,在Django的配置文件settings.py中,都会有下面的这段配置: INSTALLED_APPS = [ 'django.contrib.admin', 'd ...

  7. 【django之admin,单例模式】

    一.admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTAL ...

  8. Django之admin的使用和源码剖析

    admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTALLE ...

  9. Django 之 admin管理工具

    -------------------------------------------------------------------------妄尝恶果,苦果自来. admin组件使用 Django ...

  10. Django的Admin站点管理

    一.概述 内容发布:负责添加.修改.删除内容 公告访问 二.配置Admin应用 在settings.py文件中的INSTALLED_APPS中添加'django.contrib.admin',默认是添 ...

随机推荐

  1. 浪潮服务器I4008/NX5480M4介绍

    浪潮I4008 / NX5480M4是一款高密度模块化服务器. I4008是机箱,NX5480M4是节点. 8个计算节点模块可以部署在标准机架4U高度机器里,具有高性能.低功耗.易维护.组管理功能.适 ...

  2. ASP.NET -- WebForm -- ScriptManager 类

    ASP.NET -- WebForm -- ScriptManager 类 通过 ScriptManager 可注册随后将作为页面一部分呈现的脚本. 1. 注册并立即执行脚本. --RegisterS ...

  3. VS2017离线安装包[百度云盘](收藏了)

    *************************************************************************************************** ...

  4. vi命令下常用命令

    dd:删除游标所在的一整行(常用)ndd:n为数字.删除光标所在的向下n行,例如20dd则是删除光标所在的向下20行d1G:删除光标所在到第一行的所有数据dG:删除光标所在到最后一行的所有数据d$:删 ...

  5. 【Linux基础】iconv命令详解(编码转换)

    对于给定文件把它的内容从一种编码转换成另一种编码. iconv -f GBK -t UTF- file1 -o file2 //将GBK转换为UTF8,输出到file2.没-o那么会输出到标准输出 i ...

  6. 数据库连接池性能比对(hikari druid c3p0 dbcp jdbc)

    https://blog.csdn.net/qq_31125793/article/details/51241943 背景 对现有的数据库连接池做调研对比,综合性能,可靠性,稳定性,扩展性等因素选出推 ...

  7. Offset Management For Apache Kafka With Apache Spark Streaming

    An ingest pattern that we commonly see being adopted at Cloudera customers is Apache Spark Streaming ...

  8. js获取浏览器窗体最大化事件

    <mce:script language="javascript"><!--function ReSet() {document.getElementById(& ...

  9. redis 基本原理及安装

    一:什么是redis? Redis 是一个开源的,高性能的,基于键值对的缓存与存储系统.通过提供多种键值数据类型来适应不同场景下的缓存与存储需求. 二:redis数据库有什么优点? Redis数据库中 ...

  10. SpringBoot整合RabbitMQ-服务安装

    本系列是学习SpringBoot整合RabbitMQ的练手,包含服务安装,RabbitMQ整合SpringBoot2.x,消息可靠性投递实现等三篇博客. 学习路径:https://www.imooc. ...