欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

django admin組件使用方法詳解

 更新時(shí)間:2019年07月19日 10:25:36   作者:一路向北_聽(tīng)風(fēng)  
這篇文章主要介紹了django admin組件使用方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

關(guān)于admin:

(1) admin的概述:

admin是一個(gè)django子代的組件,當(dāng)創(chuàng)建一個(gè)項(xiàng)目會(huì)后,就會(huì)在settings文件的 INSTALLED_APPS 中自動(dòng)注冊(cè),另外在urls.py 文件中同樣存在admin的路由

INSTALLED_APPS = [
 #自帶并且注冊(cè)的一個(gè)組件即app
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
urlpatterns = [
  # 自動(dòng)存在的admin路由
  url(r'^admin/', admin.site.urls),
  url(r'^stark/', site.urls),

]

(2) admin 的執(zhí)行流程

當(dāng)django程序加載的時(shí)候,自動(dòng)循環(huán)加載已經(jīng)注冊(cè)的APP中的admin.py文件然后執(zhí)行

#在admin.py文件中有一個(gè)__init__文件 ,其中有代碼如下
#意思是:程序的啟動(dòng)自動(dòng)尋找名為admin的py文件,然后執(zhí)行
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.
  """

執(zhí)行admin.py文件中的內(nèi)容

# 在django啟動(dòng)時(shí)候,系統(tǒng)自動(dòng)加載
from django.contrib import admin
#導(dǎo)入該APP下的models
from DRF import models
#此處是一個(gè)單例模式 admion.site 
admin.site.register(models.Publisher)

單例模式site 這里應(yīng)用的是一個(gè)單例模式,對(duì)于AdminSite類(lèi)的一個(gè)單例模式,執(zhí)行的每一個(gè)App中的每一個(gè)admin.site都是一個(gè)對(duì)象

# AdminSite 類(lèi)
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()

執(zhí)行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.
    """

知識(shí)補(bǔ)充: 單例模式

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)

單例模式的實(shí)現(xiàn)方法

1:使用模塊

Python的模塊就是天然的單例模式。

因?yàn)槟K在第一次導(dǎo)入時(shí),會(huì)生成 .pyc 文件,當(dāng)?shù)诙螌?dǎo)入時(shí),就會(huì)直接加載 .pyc 文件,而不會(huì)再次執(zhí)行模塊代碼。

因此,我們只需把相關(guān)的函數(shù)和數(shù)據(jù)定義在一個(gè)模塊中,就可以獲得一個(gè)單例對(duì)象了。

例如:

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

將上面代碼保存在文件test.py,要使用時(shí),直接在其他文件中導(dǎo)入此文件中的對(duì)象,這個(gè)對(duì)象既是單例模式的對(duì)象

如: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:使用類(lèi)

4:基于__new__方法實(shí)現(xiàn)

當(dāng)我們實(shí)例化一個(gè)對(duì)象時(shí),是先執(zhí)行了類(lèi)的__new__方法

當(dāng):(我們沒(méi)寫(xiě)時(shí),默認(rèn)調(diào)用object.__new__),實(shí)例化對(duì)象;然后再執(zhí)行類(lèi)的__init__方法,對(duì)這個(gè)對(duì)象進(jìn)行初始化,所有我們可以基于這個(gè),實(shí)現(xiàn)單例模式

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 對(duì)python 匹配字符串開(kāi)頭和結(jié)尾的方法詳解

    對(duì)python 匹配字符串開(kāi)頭和結(jié)尾的方法詳解

    今天小編就為大家分享一篇對(duì)python 匹配字符串開(kāi)頭和結(jié)尾的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • pytorch fine-tune 預(yù)訓(xùn)練的模型操作

    pytorch fine-tune 預(yù)訓(xùn)練的模型操作

    這篇文章主要介紹了pytorch fine-tune 預(yù)訓(xùn)練的模型操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 詳解讓Python性能起飛的15個(gè)技巧

    詳解讓Python性能起飛的15個(gè)技巧

    Python?一直以來(lái)被大家所詬病的一點(diǎn)就是執(zhí)行速度慢,但不可否認(rèn)的是?Python?依然是我們學(xué)習(xí)和工作中的一大利器。本文總結(jié)了15個(gè)tips有助于提升?Python?執(zhí)行速度、優(yōu)化性能,需要的可以參考一下
    2022-02-02
  • Python檢測(cè)字符串中是否包含某字符集合中的字符

    Python檢測(cè)字符串中是否包含某字符集合中的字符

    這篇文章主要介紹了Python檢測(cè)字符串中是否包含某字符集合中的字符,需要的朋友可以參考下
    2015-05-05
  • Python3邏輯運(yùn)算符與成員運(yùn)算符

    Python3邏輯運(yùn)算符與成員運(yùn)算符

    這篇文章主要介紹了Python3邏輯運(yùn)算符與成員運(yùn)算符,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-09-09
  • python client使用http post 到server端的代碼

    python client使用http post 到server端的代碼

    python client使用 http post 到server端的代碼,供大家學(xué)習(xí)參考
    2013-02-02
  • Python私有屬性私有方法應(yīng)用實(shí)例解析

    Python私有屬性私有方法應(yīng)用實(shí)例解析

    這篇文章主要介紹了Python私有屬性私有方法應(yīng)用場(chǎng)景解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 淺談python中真正關(guān)閉socket的方法

    淺談python中真正關(guān)閉socket的方法

    今天小編就為大家分享一篇淺談python中真正關(guān)閉socket的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Python爬蟲(chóng):通過(guò)關(guān)鍵字爬取百度圖片

    Python爬蟲(chóng):通過(guò)關(guān)鍵字爬取百度圖片

    本文主要介紹了Python爬蟲(chóng):通過(guò)關(guān)鍵字爬取百度圖片的方法。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • Python字符串不可不知的6個(gè)小技巧分享

    Python字符串不可不知的6個(gè)小技巧分享

    字符串可以理解為一段普通的文本內(nèi)容,在python里,使用引號(hào)來(lái)表示一個(gè)字符串,不同的引號(hào)表示的效果會(huì)有區(qū)別,本文將給介紹Python字符串不可不知的6個(gè)小技巧分享,并有詳細(xì)的代碼供大家參考,感興趣的小伙伴可以參考一下
    2024-03-03

最新評(píng)論