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. gradlew和gradle的区别

    概念理解 gradlew就是对gradle的包装和配置,gradlew是gradle Wrapper,Wrapper的意思就是包装. 因为不是每个人的电脑中都安装了gradle,也不一定安装的版本是要 ...

  2. c# 正则验证

    1.验证百分数 bool tempBool = Regex.IsMatch(str, @"[1-9]{0,1}[0-9](\\.[0-9])?%");

  3. 利用XShell上传、下载文件(使用sz与rz命令)

    XSHELL工具上传文件到Linux以及下载文件到本地(Windows)   Xshell很好用,然后有时候想在windows和linux上传或下载某个文件,其实有个很简单的方法就是rz,sz.首先你 ...

  4. 面向对象内置方法之--__str__、__call__、__del__

    __str__: 在对象被打印的时候触发,可以用来定义对象被打印的输出格式 __del__:在对象被删除的时候触发,可以 用来回收对象以外的其他相关资源,比如系统资源等. __call__:在对象呗调 ...

  5. WebApi的版本控制

      using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; using Sy ...

  6. SpringCloud(7)服务链路追踪Spring Cloud Sleuth

    1.简介 Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案,并且兼容支持了 zipkin,你只需要在pom文件中引入相应的依赖即可.本文主要讲述服务追踪组件zipki ...

  7. lombok的简单使用小结

    1.idea安装lombok插件 关于lombok如何在idea中使用,下面这篇博客写的很到位,并且提供了本地安装对应idea版本的lombok插件的地址.如果无法通过idea直接安装lombok,可 ...

  8. static:get()什么意思

    在类里面static关键词相当于self关键词

  9. python+opencv读取视频,调用摄像头

    引用 import cv2 import numpy 创建摄像头对象 cap = cv2.VideoCapture("videoTest/test1.mp4") #参数为视频文件目 ...

  10. 异常SRVE0199E

    后台生成导出exe表格,在tomcat自己环境下完全没问题到websphere环境下保SRVE0199E产生这个问题是因为response.OutputStream已经打开再次打开就报这个异常,前台如 ...