zoukankan      html  css  js  c++  java
  • day72 importlib模块、 setting设置、admin之配置类

    一、importlib 模块
    import importlib

    res = 'confi.setting'
    module = importlib.import_module(res) # 以字符串的行式导入模块,拿到的是该模块名对应的名称空间
    print(module.NAME)

    二、setting设置,有自定义用自定义,没有用默认

    1. 启动文件中给全局大字典设置一个键值对,键:随便一个名子,值就是自定义的文件路径,字符串形式
      注:一定要先设置全局大字典

    start.py
    import os
    import sys
    
    BASE_DIR = os.path.dirname(__file__)
    sys.path.append(BASE_DIR)
    
    os.environ.setdefault('xxx', 'conf.settings')
    # 将自定的setting文件以键值对的形式添加到全局大字典中
    from lib.conf import settings
    
    print(settings.NAME)
    View Code
    
    

     2. lib---conf-- init文件中定义一个单例,

      该单例中的类:1. 将全局的setting文件中的变量以键值对形式放入setting单例对象名称空间中

             2.  同样也把自定义的setting文件中的变量以键值对形式放入setting单例对象名称空间中

    import os
    
    from lib.conf import global_settings
    from conf import settings
    import importlib
    
    class Settings(object):
        def __init__(self):
            for name in dir(global_settings):
                if name.isupper():
                    k= name
                    v = getattr(global_settings,name)
                    setattr(self, k, v)
            models_path = os.environ.get('xxx')
            models = importlib.import_module(models_path)
    
    
            for name in dir(models):
                if name.isupper():
                    k = name
                    v = getattr(models, name)
                    setattr(self, k, v)
    
    settings = Settings()
    View Code

    3. 利用字典的特性,自定义有就用自定义的,没有就用系统默认的

    三、配置类之五大关键性参数, django的默认配置类为ModelAdmin, 所以在自定义配置类时需继承这个默认配置类

      1. list_display= 【‘title',  'price' , 'publish_date'】                    多对多的虚拟字段不支持,数据有多个,不知道你要展示哪个; 从前往后,前面的字段必须要有,后面的不限制

      2. list_display_Links = 【‘title',  'price' , 'publish_date'】         给表字段设置链接配置

      3. search_field = 【‘title',  'price'】              在指定的字段中寻找,title字段中或者price中字段有的,都会被过滤出来

      4. list_filter = 【’publish',  'authors'】             过滤,字段间and关系,外键多对多的字段

      5. patch_init                       定义函数【函数名没所谓】,  action中下拉菜单内容

       

       def   patch_init(self, request, queryset)

          pass

       patch_init.short_description = '批量修改‘

       actions = 【patch_init】

       

    from django.contrib import admin
    from app01 import models
    
    # Register your models here.
    
    class Backend(admin.ModelAdmin):
        list_display = ['title', 'price', 'publish_date']
        list_display_links = ['title', 'publish_date']
        search_fields = ['price', 'title']
        list_filter = ['authors', 'publish']
    
        def patch_init(self, request, queryset):
            pass
        patch_init.short_description = '批量修改'
        actions = [patch_init]
    
    
    admin.site.register(models.Book, Backend)
    admin.site.register(models.Publish,)
    admin.site.register(models.Author, )
    admin.site.register(models.Authordetail)
    View Code

    四、路由分发的本质

           url(r'^test/',([],None,None))

    一级路由: 

    urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^stark/', ([
    url(r'^stark_1/', tark_1),
    url(r'^stark_2/', tark_2),
    url(r'^stark_3/', tark_3),
    ],None,None)),
    ]


    二级路由:

    urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^stark/', ([
    url(r'^stark_1/', ([
    url(r'^stark_1_1/', tark_1_1),
    url(r'^stark_1_2/', tark_1_2),
    ],None, None)),
    url(r'^stark_2/', ([
    url(r'^stark_2_1/', tark_2_1),
    url(r'^stark_2_2/', tark_2_2),
    url(r'^stark_2_3/', tark_2_3),
    ],None, None)),
    url(r'^stark_3/', ([],None, None)),
    ],None,None)),
    ]
  • 相关阅读:
    C语言宏中"#"和"##"的用法
    Ubuntu 14.04 LTS 安装和配置Bochs
    C和C++中static的比较
    总线设备驱动模型
    驱动设计的思想:面向对象/分层/分离
    基于分层思想的驱动程序软件框架
    单元测试指南
    Apollo移植
    剑指offer python版 数组中出现次数超过一半的数字
    剑指offer python版 字符串的排列
  • 原文地址:https://www.cnblogs.com/qingqinxu/p/11276652.html
Copyright © 2011-2022 走看看