admin組件詳解

來源:互聯網
上載者:User
admin組件詳解

先根據admin組件啟動流程複習下django項目啟動至請求過來發生的事

1將admin組件註冊進app
2django項目啟動
3在運行到定製的admin時執行其下面的apps檔案中類下面ready函數在項目啟動時就執行每個app下面的admin檔案
4當使用者發送請求進來首先經過wsgi處理
5再運行中介軟體中的各個組件對請求進行處理
6在url中找到對應的視圖函數並執行返回一個response對象
7返回對象再經過中介軟體處理(此時執行順序是從後往前)

流程

知識點

1、django admin利用的是python專屬的單例模式來調用的再python中每一個py檔案的執行都會產生一個pyc的檔案,當下次再調用時,並不會在執行一次py檔案, 而是拿到先前生pyc檔案的空間中的資料。

2、 改寫方法指定app啟動時,執行每個app目錄下的stark檔案

def ready(self):    autodiscover_modules('stark')

  

3通過查看源碼admin中的註冊方法通過site調用,site即一個檔案類中產生的單例對象,建立檔案定義一個產生site對象的方法,定義register方法

class StarkSite(object):  def __init__(self, name='admin'):    self._registry = {} #記錄註冊的model類  def register(self, model, admin_class=None, **options):    if not admin_class:    admin_class = ModelStark # 配置類    self._registry[model] = admin_class(model)

  

4model註冊進此時應該產生對應的url,每張表都應該有自己專屬的url,url對應著表中資料的增刪改查,那麼設計url尤為重要,此時我們採用url分發的方法,一級路由由表名進行命名,二級路由另外寫個類,用來調用(因為site是單例,如果寫在一個類裡面,則每個url都需要產生4個url,代碼重複,應該在使用者訪問某張表的時候產生對應的增刪改查路由)

#一級路由代碼
def get_urls(self):     temp = []      for model_class, config_obj in self._registry.items():        print("===>", model_class, config_obj)         model_name = model_class._meta.model_name        app_label = model_class._meta.app_label        print("===>", app_label, model_name)         temp.append(url(r'^%s/%s/' % (app_label, model_name),config_obj.urls))                

  

5、config_obj是配置類對象,二級路由放入配置類中,在使用者註冊時,如果有自己的配置類則用自己的 ,沒有則用預設的 

def get_urls(self):      temp=[        url("^$",self.list_view,name="%s_%s_list"%(self.app_model_name)),        url("^add/$",self.add_view,name="%s_%s_add"%(self.app_model_name)),        url("^(\d+)/change/$",self.change_view,name="%s_%s_change"%            (self.app_model_name)),        url("^(\d+)/delete/$",self.delete_view,name="%s_%s_delete"%(self.app_model_name)), ]         temp.extend(self.extra_urls())         return temp@property                               #此裝飾器的作用是讓方法變成可以像屬性一樣調用def urls(self):     return self.get_urls(),None,None

6在裝飾類下定義增刪改查4個視圖方法

流程圖

>

至於增刪改查視圖中的方法就步過介紹了,自訂admin組件的基本邏輯就是這樣

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.