單例的實現方式
- 文件導入
- 類方法
反射的應用
- importlib
- getattr
# 配置文件中的配置項
db_path = 'db.mysql.MysqlHelper'
module_path,cls_name = db_path.rsplit('.',1) # 從配置字符串中切出模塊路徑和類名
import importlib
module_obj = importlib.import_module(module_path) # 以字符串形式導入類
cls = getattr(module_obj,cls_name) # 通過反射導入模塊
cls.fetch_one() # 得到模塊中的類,正常使用
開放封閉原則
開放封閉原則(OCP,Open Closed Principle)是所有面向對象原則的核心。
關于開放封閉原則,其核心的思想是:
軟件實體應該是可擴展,而不可修改的。也就是說,對擴展是開放的,而對修改是封閉的。
因此,開放封閉原則主要體現在兩個方面:
- 對擴展開放,意味著有新的需求或變化時,可以對現有代碼進行擴展,以適應新的情況。
- 對修改封閉,意味著類一旦設計完成,就可以獨立完成其工作,而不要對類進行任何修改。
request.GET
-
request.GET
是QueryDict
數據類型 - 數據通過url得來
?name=alex&age=18&age=19
- request.GET默認不可修改,可以通過
_mutable
屬性來改變
qd = QueryDict(mutable=True)
qd['a'] = 1
qd.setlist('b','abc')
# <QueryDict: {'a': [1], 'b': ['a', 'b', 'c']}>
CRM中幾個重要的類
組件中:
- StarkSite,單例模式,用于保存model類和處理這個類增刪改查的配置類的對象
- StarkConfig, 處理增刪改查的基類
- ChangeList, 將列表頁面功能封裝到了此類中
- FilterRow, 可迭代對象,封裝了組合搜索中的一行數據。
- FilterOption, 封裝組合搜索的配置信息(數據庫字段,是否多選,是否choice)
使用:
- class UserInfo(models.Model):...
- stark.py
class UserModelForm(ModelForm):
class Meta:
model = UserInfo
fields = "__all__"
class UserInfoConfig(StarkConfig):
list_display
...
...
model_form_class = UserModelForm
v1.site.register(UserInfo, UserInfoConfig)