配置文件与后台管理配置与bug检测工具
django配置文件
django其实有两个配置文件:
- 一个是用户可以自定义的基本配置:
from 项目名 import settings
- 另一个是django全局的默认配置:
from django.conf import global_settings
如果自定义配置和默认配置有配置冲突了,则会优先使用用户自定义配置,这就是为什么我们有些功能需要去配置文件中添加,因为有些功能使用的是默认配置,修改功能就要去配置文件中添加。
自定义配置中有的配置,默认配置里肯定也有;自定义配置中没有的配置,默认配置里可能会有;
如果既要获取自定义配置中的配置,又要获取默认配置中的配置,可以这么导入配置:
from django.conf import settings
这样就不需要同时导入自定义配置和默认配置了,在获取配置时,会优先获取自定义配置中的配置。
django配置文件源码
查看为什么导入一个配置就能同时使用自定义配和默认配置:
from django.conf import settings
查看源码,它是通过LazySettings()实例化得到的。
settings = LazySettings()
查看LazySettings():
首先看第二个红框,这里有一个os.environ,这个可以看成是一个存项目各个信息的大字典,在manage.py文件中对os.environ添加了一个键值对:值就是自定义配置文件的路径
所以在LazySettings()中settings_module就是自定义配置的路径,获取路径后由Settings()实例化,查看Settings类中的__init__方法:
def __init__(self, settings_module):
# 首先获取全局默认配置中的各个配置
for setting in dir(global_settings):
# 配置文件中全大写的变量才是配置
if setting.isupper():
# 利用反射给Settings对象添加配置的键值对
setattr(self, setting, getattr(global_settings, setting))
self.SETTINGS_MODULE = settings_module
# 通过importlib把自定义配置文件的字符串形式路径导入
mod = importlib.import_module(self.SETTINGS_MODULE)
tuple_settings = (
"INSTALLED_APPS",
"TEMPLATE_DIRS",
"LOCALE_PATHS",
)
self._explicit_settings = set()
# 获取自定义配置文件中的各个配置
for setting in dir(mod):
# 配置文件中全大写的变量才是配置
if setting.isupper():
# 先获取自定义配置文件中的配置的值
setting_value = getattr(mod, setting)
# 不用看
if (setting in tuple_settings and
not isinstance(setting_value, (list, tuple))):
raise ImproperlyConfigured("The %s setting must be a list or a tuple. " % setting)
# 利用反射给Settings对象添加配置的键值对,如果已经有了就会覆盖掉
setattr(self, setting, setting_value)
self._explicit_settings.add(setting)
这就是为什么导入一个settings就可以使用到自定义配置和默认配置,简单的说就是先获取默认配置中的全部配置,然后获取自定义配置中的配置,如果配置已经有了就把他覆盖。
admin.py配置参数
admin.py除了注册模型层中的类后,可以后台管理外,还有一些其他参数
常用配置
控制后台管理表中显示的字段数量:list_display
class 类名(admin.ModelAdmin):
list_display = ['字段1', '字段2', ...]
admin.site.register(models.表名, 类名)
控制可以被访问的字段,指定字段后,后台数据只能从指定字段访问:list_display_links(需要先list_display指定字段)
class 类名(admin.ModelAdmin):
list_display = ['字段1', '字段2', ...]
list_display_links = ['字段1', '字段2', ...]
admin.site.register(models.表名, 类名)
添加根据字段查询数据,输入后根据指定字段的数据筛选:search_fields
class 类名(admin.ModelAdmin):
search_fields = ['字段1', '字段2', ...]
admin.site.register(models.表名, 类名)
筛选功能,在侧边出现,一般写外键字段,普通字段没有实际意义:list_filter
class 类名(admin.ModelAdmin):
list_filter = ['字段1', '字段2', ...]
admin.site.register(models.表名, 类名)
数据批量处理:actions
class 类名(admin.ModelAdmin):
def add(self,request,queryset):
# 每个数据自增1000
queryset.update(字段=F('字段') + 1000)
# 后台显示的操作名称
add.short_description = '数据批量处理'
# 指定函数
actions = [add, ]
admin.site.register(models.表名, 类名)
其他配置
参考Django-admin管理工具 - JasonJi - 博客园 (cnblogs.com)
bug检测功能django-debug-toolbar
需要安装:
pip install django-debug-toolbar
注意安装时,如果django版本不对,它会重装你的django版本。