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

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

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

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

当然admin是写到了init里

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

 

  1. # models
  2. # __all__ = ['tables1',]
  3.  
  4. # admin
  5. # from . import models
  6. # for tables in models.__all__:
  7. # admin.site.register(getattr(models,table))

  

1. 使用管理工具:

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

2. admin的定制:

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

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

  1. class UserInfoInline(admin.StackedInline): # TabularInline
  2. extra = 0
  3. model = models.UserInfo
  4.  
  5. class GroupAdminMode(admin.ModelAdmin):
  6. list_display = ('id', 'title',)
  7. inlines = [UserInfoInline, ]

10 定制HTML模板

  1. add_form_template = None
  2. change_form_template = None
  3. change_list_template = None
  4. delete_confirmation_template = None
  5. delete_selected_confirmation_template = None
  6. object_history_template = None

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

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

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

  1. fields = ('user',)

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

  1. exclude = ('user',)

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

  1. readonly_fields = ('user',)

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

  1. @admin.register(models.UserInfo)
  2. class UserAdmin(admin.ModelAdmin):
  3. fieldsets = (
  4. ('基本数据', {
  5. 'fields': ('user', 'pwd', 'ctime',)
  6. }),
  7. ('其他', {
  8. 'classes': ('collapse', 'wide', 'extrapretty'), # 'collapse','wide', 'extrapretty'
  9. 'fields': ('user', 'pwd'),
  10. }),
  11. )

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

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

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

  1. ordering = ('-id',)

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

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

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

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

  1. from app01 import models
  2. from django.forms import ModelForm
  3. from django.forms import fields
  4.  
  5. class MyForm(ModelForm):
  6. others = fields.CharField()
  7.  
  8. class Meta:
  9. model = models = models.UserInfo
  10. fields = "__all__"
  11.  
  12. @admin.register(models.UserInfo)
  13. class UserAdmin(admin.ModelAdmin):
  14.  
  15. form = MyForm

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

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

二、单例模式

1. 使用 __new__

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

  1. class Singleton(object):
  2. _instance = None
  3. def __new__(cls, *args, **kw):
  4. if not cls._instance:
  5. cls._instance = super(Singleton, cls).__new__(cls, *args, **kw)
  6. return cls._instance
  7.  
  8. class MyClass(Singleton):
  9. a = 1

2. 使用模块

  1. class My_Singleton(object):
  2. x = 12
  3. def foo(self):
  4. print(self.x)
  5.  
  6. my_singleton = My_Singleton()
  7.  
  8. print('ok')

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

  1. from mysingleton import my_singleton
  2.  
  3. my_singleton.foo()

  1. 知识点:
    url()的使用:
    path('yuan/',([path('test01/',test01)],None,None)), # yuan/test01
  1.   path('yuan/',([
  2. path('test01/',([
  3. path('test04/',test04), # yuan/test01/test04
  4. path('test05/',test05) # yuan/test01/test05
  5. ],None,None)),
  6. path('test02/',test02), # yuan/test02
  7. path('test03/',test03) # yuan/test03
  8. ],None,None))

  1. 注: 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. Elixir 分布式平台

    概述 分布式平台的核心在于并发,容错. 而 Elixir 的优势正是在于对于并发和容错的处理. 分布式模型 CSP(Communicating Sequential Process) 模型 :: 多个 ...

  2. 被低估的.net(上) - 微软MonkeyFest 2018广州分享会活动回顾

    前天, 2018年11月10日, 广州图书馆\微软云开发者社区\广东职业教育信息化研究会\珠三角技术沙龙在广州图书馆负一层1号报告厅搞了一场”微软最有价值专家(MVP)广州分享会 - MonkeyFe ...

  3. web框架。Django--

    一,DIY一个web框架 1.1什么是web框架 1.2用socket模拟B-S的服务端 1.3,浏览器端的network查看 1.4,request格式 1.5,response格式 1.6,初识w ...

  4. 使用idea搭建Scala 项目

    主要内容 Intellij IDEA开发环境简介 Intellij IDEA Scala开发环境搭建 Intellij IDEA常见问题及解决方案 Intellij IDEA常用快捷键 1. Inte ...

  5. zabbix相关

    链接:https://pan.baidu.com/s/1gjwZrJGCYM1NWJhhK7IhiQ  密码:76nm

  6. Linux搜索文件、文件夹数、文件个数命令

    1.查看某文件夹下文件的个数:ls -l|grep "^-"|wc -l 2.查看某文件夹下文件目录的个数:ls -l|grep "^d"|wc -l 3.查看 ...

  7. Autoware(1)——快速开始

    该部分可参照github Autoware中的 Demo Quick_Start. 1. 建立目录“.autoware”来保存demo数据 mkdir .autoware 2. 下载Demo数据下载d ...

  8. 20175310 《Java程序设计》第9周学习总结

    20175310 <Java程序设计>第9周学习总结 本周博客:https://www.cnblogs.com/xicyannn/p/10785915.html 教材学习内容总结 这周学习 ...

  9. 理解koa-router 路由一般使用

    阅读目录 一:理解koa-router一般的路由 二:理解koa-router命名路由 三:理解koa-router多个中间件使用 四:理解koa-router嵌套路由 五:分割路由文件 回到顶部 一 ...

  10. 可视化工具Grafana:简介及安装

    随着业务的越发复杂,对软件系统的要求越来越高,这意味着我们需要随时掌控系统的运行情况.因此,对系统的实时监控以及可视化展示,就成了基础架构的必须能力. 这篇博客,介绍下开源的可视化套件grafana的 ...