• admin源码分析


    django settings 源码分析

    导入settingso模块,进入源码,会发现settings是一个 单例 LazySettings类实例化产生的一个对象,
    LazySettings实例化后就会走它内部的_setup函数


    importlib模块的作用 : 以字符串的形式导入模块,拿到能够访问该模块名称 空间的名字
    module = imporlib.import_module('字符串')


    settings配置用户自定义的原理:
    项目启动后,会使用os.environ.settdefault('xxx','conf.settings')在os中设置一个全局大字典,放置暴露给用户的settings文件路径
    会先加载全局的配置,然后再加载用户配置的,如果用户配置了,会将全局的配置顶掉。
    而没有设置的项就会采用默认配置,来实现settings内部用户自定义配置的功能
    首先会for循环默认配置,使用dir(全局配置模块) 获得所有该模块下的字符串形式的名称列表,然后对名称进行判断,
    因为如果用需要自定义的配置,变量名必须大写,所以经行筛选,将符合要求的配置以键值对的形式使用setattr存入settings对象中
    然后从全局大字典,从os中的全局大字典中获取暴露给用户的settings文件路径,使用import_module 将路径以字符串的形式导入模块
    然后for循环该模块,获得暴露给用户的配置文件中的所有配置,以键值对的形式存入到settings对象中

    实现django中的settings 用户配置了就使用用户自定义的配置的settings,用户没有配置就使用django全局的settings的
    导入模块发生的三件事:
    1. 创建运行模块的名称空间
    2. 创建被导入模块的模块名称空间,并执行该模块所有代码,将产生的名字全部放入该名称空间中
    3. 然后在执行文件中产生一个名字,指向被导入模块的名称空间



    admin的五大配置参数
    当用户没有自定义方法的时候。admin会使用默认的ModelAdmin。当用户自定义了方法,会使用用户自定义的方法
    list_display = ['字段名'] 控制在admin页面中展示字段的 (控制展示字段)

    list_display_links = [‘字段名’] 在后台筛选时可以被筛选的字段。 (控制跳转字段)

    search_fields = [‘字段名’] 查询器,以字段名经行查询,在查询的时候是“或”的关系,(或查询)

    list_filter = [‘外键字段名’] 右侧过滤器 在内部添加外键字段,会筛选所对应的数据, (如果有多个外键字段,可以用与查询 挨个筛选,
    可以添加多对多的字段,在过滤的时候是“与”的关系 比如先筛选人名,再筛选它写的书,and操作 )



    # 批量修改值。在queryset_update(字段名=‘新值’) 可以将选中的字段更改为指定的值
    def path_init(self,request,queryset):
    queryset.update(price=666)
    path_init.short_description = '价格批量修改'
    actions = [path_init]


    配置类的概念


    admin 源码分析
    django启动的会依次执行每一个app应用下的admin.py文件
    模块在导入的时候会执行__all__方法。当文件被导入的时候。可以被使用的所有名字

    # 下方导入的模块,与定义的函数。决定了django每次启动的时候会执行该函数,会去每一个应用下寻找admin.py文件
    from django.utils.module_loading import autodiscover_modules
    def autodiscover():
    autodiscover_modules('admin', register_to=site) # 如果将 'admin' 替换成别的,就会执行别的。



    实现单例的几种方式


    1.基于classmethod
    2.基于装饰器
    3.基于元类__call__
    4.基于__new__
    5.基于模块



  • 相关阅读:
    第一篇博客
    【面试大系】PHP程序员的知识盘点
    【PHP资源】PHP 资源大全
    【前端经纬】将页面元素定位
    大爱卡农三百年
    【夯实PHP基础】PHP标准库 SPL
    【http抓包】记录一次抓手机app的接口
    【算法】PHP实现冒泡排序和快速排序--防遗忘
    Apache的初中级面试题
    【生活感悟系列】感悟在一瞬间(不断完善中)
  • 原文地址:https://www.cnblogs.com/liguodeboke/p/11280323.html
Copyright © 2020-2023  润新知