亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

django admin組件使用方法詳解

發布時間:2020-09-06 09:32:19 來源:腳本之家 閱讀:233 作者:一路向北_聽風 欄目:開發技術

關于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__方法,對這個對象進行初始化,所有我們可以基于這個,實現單例模式

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

石楼县| 彰化市| 察雅县| 吉首市| 萨迦县| 北宁市| 大城县| 肃南| 遂平县| 白河县| 华容县| 丰城市| 隆安县| 灌南县| 磐安县| 黔南| 康马县| 顺平县| 胶南市| 新龙县| 南投县| 安图县| 文登市| 伊通| 泊头市| 来凤县| 湘西| 民乐县| 弥渡县| 天峨县| 明光市| 土默特右旗| 雷州市| 额济纳旗| 伊吾县| 灌阳县| 湖南省| 沈阳市| 嵩明县| 呼玛县| 博罗县|