django admin组件使用方法详解

作者:一路向北_听风 时间:2021-05-28 19:59:53 

关于admin:

(1) admin的概述:

admin是一个django子代的组件,当创建一个项目会后,就会在settings文件的 INSTALLED_APPS 中自动注册,另外在urls.py 文件中同样存在admin的路由


INSTALLED_APPS = [
#自带并且注册的一个组件即app
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',

urlpatterns = [
 # 自动存在的admin路由
 url(r'^admin/', admin.site.urls),
 url(r'^stark/', site.urls),

]

(2) admin 的执行流程

当django程序加载的时候,自动循环加载已经注册的APP中的admin.py文件然后执行


#在admin.py文件中有一个__init__文件 ,其中有代码如下
#意思是:程序的启动自动寻找名为admin的py文件,然后执行
def autodiscover():
 autodiscover_modules('admin', register_to=site)

#具体的方法如下:
def autodiscover_modules(*args, **kwargs):
 """
 Auto-discover INSTALLED_APPS modules and fail silently when
 not present. This forces an import on them to register any admin bits they
 may want.

You may provide a register_to keyword parameter as a way to access a
 registry. This register_to object must have a _registry instance variable
 to access it.
 """

执行admin.py文件中的内容


# 在django启动时候,系统自动加载
from django.contrib import admin
#导入该APP下的models
from DRF import models
#此处是一个单例模式 admion.site
admin.site.register(models.Publisher)

单例模式site 这里应用的是一个单例模式,对于AdminSite类的一个单例模式,执行的每一个App中的每一个admin.site都是一个对象


# AdminSite 类
class AdminSite(object):
   ...  
   def __init__(self, name='admin'):
     self._registry = {} # model_class class -> admin_class instance
     self.name = name
     self._actions = {'delete_selected': actions.delete_selected}
     self._global_actions = self._actions.copy()
     all_sites.add(self)
   ....
site = AdminSite()

执行register方法


# AdminSite中的register 方法
 def register(self, model_or_iterable, admin_class=None, **options):
   """
   Registers the given model(s) with the given admin class.
   The model(s) should be Model classes, not instances.
   If an admin class isn't given, it will use ModelAdmin (the default
   admin options). If keyword arguments are given -- e.g., list_display --
   they'll be applied as options to the admin class.
   If a model is already registered, this will raise AlreadyRegistered.
   If a model is abstract, this will raise ImproperlyConfigured.
   """

知识补充: 单例模式

a.py


class AdminSite(object):

def __init__(self):
   self._registry = {}
obj1 = AdminSite()

b.py


import a
a.obj1._registry['k2'] = 666

c.py


import a
a.obj1._registry['k1'] = 123
print(a.obj1._registry)

单例模式的实现方法

1:使用模块

Python的模块就是天然的单例模式。

因为模块在第一次导入时,会生成 .pyc 文件,当第二次导入时,就会直接加载 .pyc 文件,而不会再次执行模块代码。

因此,我们只需把相关的函数和数据定义在一个模块中,就可以获得一个单例对象了。

例如:


class V1(object):
 def foo(self)
   pass
V1 = V1()

将上面代码保存在文件test.py,要使用时,直接在其他文件中导入此文件中的对象,这个对象既是单例模式的对象

如:from a import V1

2:使用装饰器


def Singleton(cls):
 _instance = {}
 def _singleton(*args, **kargs):
   if cls not in _instance:
     _instance[cls] = cls(*args, **kargs)
   return _instance[cls]
 return _singleton
@Singleton
class A(object):
 a = 1
 def __init__(self, x=0):
   self.x = x
a1 = A(2)
a2 = A(3)

3:使用类

4:基于__new__方法实现

当我们实例化一个对象时,是先执行了类的__new__方法

当:(我们没写时,默认调用object.__new__),实例化对象;然后再执行类的__init__方法,对这个对象进行初始化,所有我们可以基于这个,实现单例模式

来源:https://www.cnblogs.com/wcx666/p/10420478.html

标签:django,admin,组件
0
投稿

猜你喜欢

  • python多进程执行方法apply_async使用说明

    2023-01-31 11:56:10
  • Python中的多行注释文档编写风格汇总

    2023-05-05 02:41:18
  • jupyter notebook实现显示行号

    2022-11-20 03:51:40
  • TensorFlow教程Softmax逻辑回归识别手写数字MNIST数据集

    2021-05-24 18:25:35
  • js换图片效果可进行定时操作

    2023-08-23 07:45:34
  • python绘制双柱形图代码实例

    2022-02-28 19:42:27
  • react+django清除浏览器缓存的几种方法小结

    2022-10-05 03:07:45
  • pytz格式化北京时间多出6分钟问题的解决方法

    2021-07-31 14:10:21
  • Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例

    2022-10-11 23:14:40
  • 基于python的图片修复程序(实现水印去除)

    2021-07-03 13:35:04
  • 将ASP记录集输出成n列的表格形式显示的方法

    2011-04-08 10:51:00
  • Python竟能画这么漂亮的花,帅呆了(代码分享)

    2021-02-04 15:50:00
  • ASP 读取MP3文件帧的信息比特率,采样频率,播放时间

    2010-06-04 12:22:00
  • Scrapy项目实战之爬取某社区用户详情

    2022-04-16 11:36:31
  • 20个优秀网站助你征服CSS[译]

    2008-09-21 13:21:00
  • python多线程socket编程之多客户端接入

    2021-01-26 10:14:52
  • Python基础详解之邮件处理

    2021-03-16 09:27:58
  • oracle sqlplus 常用命令大全

    2009-05-24 19:47:00
  • python中注释用法简单示例

    2022-10-24 05:04:09
  • python 画三维图像 曲面图和散点图的示例

    2022-04-13 01:28:16
  • asp之家 网络编程 m.aspxhome.com