一、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)
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()
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)
四、路由分发的本质
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)),
]