s111 stark组件
內(nèi)容回顧:
1. 類當做key
2. django中的model所在app名稱、以及小寫類名。
app01 userinfo
app02 role
今日內(nèi)容:
1. stark介紹
???? 快速完成對N張表增刪改查+自定義復雜操作。
2. 單例模式
3. 路由系統(tǒng)
4. 啟動后、路由加載前定制一段代碼。
5. 參考django admin源碼編寫組件。
內(nèi)容詳細:
1. stark介紹
???? 快速完成對N張表增刪改查+自定義復雜操作。
2. 單例模式
???? 這么寫:
???????? stark.py
???????????? class Adminstark(object):
???????????????? pass
???????????? site = Adminstark()???
???? 調(diào)用實例:
???????? import stark
???????? stark.site
???????? stark.site
任何去導入lewen模塊的就會執(zhí)行, obj1 = AdminSite() ,
因為單列模式是所有調(diào)用的共用一個對象,如果每次調(diào)用,經(jīng)構造方法綁定的值不做存儲,那么會后面調(diào)用模塊設置的值覆蓋掉。
可以在單列模式內(nèi)部用一個靜態(tài)字段存儲每次的不同調(diào)用設置的值。
3. 路由系統(tǒng)
???? - include
???? - namespace
4. 啟動后、路由加載前定制一段代碼。
???? stark/service/stark.py 類似admin功能,提供表的注冊
???? a. 創(chuàng)建一個stark app 組件
???? b. 編寫ready方法
???????? stark/app.py
???????? from django.apps import AppConfig
???????? class StarkConfig(AppConfig):
???????????? name = 'stark'
???????????? def ready(self):
???????????? "Override this method in subclasses to run code when Django starts."
???????????????? from django.utils.module_loading import autodiscover_modules
???????????????? autodiscover_modules('stark')
????? 程序啟動時,會先去每個app中找stark.py文件并加載。
???? c. 其他app中創(chuàng)建stark.py????
???? d. 程序啟動時便會自動加載 stark.py
???
class StarkConfig(object):def __init__(self, model_class,site):self.model_class = model_classself.site = sitedef func(self):print(self.model_class)def run(self):self.func()class AdminSite(object):def __init__(self):self._registry = {}self.app_name = 'stark'self.namespace = 'stark'def register(self,model_class,stark_config=None):# model_class=models.Role# stark_config=Noneif not stark_config: # 判斷是否有自定義的配置,stark_config = StarkConfig # 沒有就用,默認的# model_class=models.Role# stark_config=RoleConfigself._registry[model_class] = stark_config(model_class,self)"""{models.UserInfo: StarkConfig(models.UserInfo), # 封裝:model_class=UserInfo,site=site對象models.Role: RoleConfig(models.Role) # 封裝:model_class=Role,site=site對象}"""for k,v in self._registry.items():v.run()# models.UserInfo,StarkConfig對象# models.Role,RoleConfig對象site = AdminSite() stark/service/stark.pyfrom django.apps import AppConfigclass StarkConfig(AppConfig):name = 'stark'def ready(self):"Override this method in subclasses to run code when Django starts."from django.utils.module_loading import autodiscover_modulesautodiscover_modules('stark') stark/apps.pyapp01/models.py from django.db import models class UserInfo(models.Model):title = models.CharField(max_length=32)app01/stark.py from stark.service.stark import site from app01 import models site.register(models.UserInfo) app01/stark.py總結
以上是生活随笔為你收集整理的s111 stark组件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python django-restfr
- 下一篇: stark 增删改