配置文件与后台管理配置与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():

image

首先看第二个红框,这里有一个os.environ,这个可以看成是一个存项目各个信息的大字典,在manage.py文件中对os.environ添加了一个键值对:值就是自定义配置文件的路径

image

所以在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.表名, 类名)

image

其他配置

参考Django-admin管理工具 - JasonJi - 博客园 (cnblogs.com)

bug检测功能django-debug-toolbar

需要安装:

pip install django-debug-toolbar

注意安装时,如果django版本不对,它会重装你的django版本。

使用:django-debug-toolbar - JasonJi - 博客园 (cnblogs.com)

posted @ 2022-06-02 18:39  Yume_Minami  阅读(104)  评论(0编辑  收藏  举报