[Django 0-1] Core.Checks 模块

Checks 源码分析

Django 的 checks 模块提供了一系列的检查函数,用于检查 Django 项目的配置是否正确。

文件结构

.
├── __init__.py
├── async_checks.py
├── caches.py
├── compatibility
│   ├── __init__.py
│   └── django_4_0.py
├── database.py
├── files.py
├── messages.py
├── model_checks.py
├── registry.py
├── security
│   ├── __init__.py
│   ├── base.py
│   ├── csrf.py
│   └── sessions.py
├── templates.py
├── translation.py
└── urls.py3 directories, 17 files

可以学习的地方

  • 对项目的可靠性检查方面可以借鉴 Django 的设计,可以包括

    • 内置的 contrib 如 admin
    • async_support 特性检查,如是否在不支持的环境下开启了异步支持
    • 缓存配置检查,如是否使用了过期时间短的缓存
    • 数据库配置检查,如是否使用了过期时间短的数据库连接
    • 模型检查,如是否有重复的模型名称
    • 安全检查,如是否开启了 CSRF 保护,是否使用了过期时间短的 session
    • 模板检查
    • 翻译检查
    • URL 检查
    • siangls 检查
    • files 文件系统检查
  • 使用inspect.func_accepts_kwargs函数,强制让函数参数中包含**kwargs
    同样的函数还有func_accepts_var_args,强制让函数参数中包含*args
    func_supports_parameter置顶

  • core/checks/registry.py CheckRegistry 类方法提供了利用装饰器机制封装了函数register用于注册检查。


class CheckRegistry:def __init__(self):self.registered_checks = set()self.deployment_checks = set()def register(self, check=None, *tags, **kwargs):"""Can be used as a function or a decorator. Register given function`f` labeled with given `tags`. The function should receive **kwargsand return list of Errors and Warnings.Example::registry = CheckRegistry()@registry.register('mytag', 'anothertag')def my_check(app_configs, **kwargs):# ... perform checks and collect `errors` ...return errors# orregistry.register(my_check, 'mytag', 'anothertag')"""def inner(check):if not func_accepts_kwargs(check):raise TypeError("Check functions must accept keyword arguments (**kwargs).")check.tags = tagschecks = (self.deployment_checksif kwargs.get("deploy")else self.registered_checks)checks.add(check)return check# 如果你的check函数是一个callable对象,那么直接返回inner(check)if callable(check):return inner(check)else:if check:tags += (check,)return inner
  • 为项目建立一个 runtime 检查机制,通过这些 checks 来确保项目的运行正确。

id 可以确保所有 errors 和 warnings 的唯一性,并提供一种过滤 id 和 level 机制来忽略特定的错误。

class CheckMessage:def __init__(self, level, msg, hint=None, obj=None, id=None):if not isinstance(level, int):raise TypeError("The first argument should be level.")self.level = levelself.msg = msgself.hint = hintself.obj = objself.id = iddef __eq__(self, other):return isinstance(other, self.__class__) and all(getattr(self, attr) == getattr(other, attr)for attr in ["level", "msg", "hint", "obj", "id"])def __str__(self):from django.db import modelsif self.obj is None:obj = "?"elif isinstance(self.obj, models.base.ModelBase):# We need to hardcode ModelBase and Field cases because its __str__# method doesn't return "applabel.modellabel" and cannot be changed.obj = self.obj._meta.labelelse:obj = str(self.obj)id = "(%s) " % self.id if self.id else ""hint = "\n\tHINT: %s" % self.hint if self.hint else ""return "%s: %s%s%s" % (obj, id, self.msg, hint)def __repr__(self):return "<%s: level=%r, msg=%r, hint=%r, obj=%r, id=%r>" % (self.__class__.__name__,self.level,self.msg,self.hint,self.obj,self.id,)def is_serious(self, level=ERROR):return self.level >= leveldef is_silenced(self):from django.conf import settingsreturn self.id in settings.SILENCED_SYSTEM_CHECKSclass Debug(CheckMessage):def __init__(self, *args, **kwargs):super().__init__(DEBUG, *args, **kwargs)class Info(CheckMessage):def __init__(self, *args, **kwargs):super().__init__(INFO, *args, **kwargs)class Warning(CheckMessage):def __init__(self, *args, **kwargs):super().__init__(WARNING, *args, **kwargs)class Error(CheckMessage):def __init__(self, *args, **kwargs):super().__init__(ERROR, *args, **kwargs)class Critical(CheckMessage):def __init__(self, *args, **kwargs):super().__init__(CRITICAL, *args, **kwargs)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741484.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【知识库系统】使用SpringSecurity进行身份认证

一、理论知识部分 SpringSecurity 的官网文档地址&#xff1a;SpringSecurity 这里以24年3月份的 6.2.2 版本为例&#xff0c;记录一下学习过程。 1. SpringSecurity 是基于 Servlet Filters 的&#xff0c;而 Servlet Filters 中的流程如下&#xff1a;首先由客户端 Client…

【前端】如何计算首屏及白屏时间

文章目录 一、首屏时间二、白屏时间 一、首屏时间 白屏时间&#xff1a;页面渲染完所有内容的时间 简单点就是在<body> 标签后写js代码计算&#xff0c;但是不是很准确 <head><title>白屏时间</title> </head> <body></body> <s…

hdfs shell操作助记总结

目录 1 Hadoop shell操作1.1 hadoop文件系统和local本地文件系统的交互命令1.1.1 从local到hadoop1.1.2 从hadoop到local 1.2 hadoop与linex相似但不同的相关文件操作 1 Hadoop shell操作 最高级目录名称是 ./~/bin/hdfs dfs 1.1 hadoop文件系统和local本地文件系统的交互命令…

时间复杂度中的log(n)底数是多少?

问题&#xff1a; 最近有好几学生问我&#xff0c;无论是计算机算法概论、还是数据结构书中&#xff0c; 关于算法的时间复杂度很多都用包含O(logN)这样的描述&#xff0c;但是却没有明确说logN的底数究竟是多少。 解答&#xff1a; 算法中log级别的时间复杂度都是由于使用了分…

Leetcode 20. 有效的括号

题目描述&#xff1a; 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序…

Android UI:ViewTree中的操作

文章目录 View.invalidate操作View.requestLayout操作ViewGroup.addView操作小结View.invalidate操作 1.从下向上,利用链表结构传递dirty,dirty是需要重新渲染的区域 从调用invalidate的View对象,直到树顶的ViewRootImpl对象 涉及到的API View.invalidate() ViewGroup.inval…

关于stm32(CubeMX+HAL库)的掉电检测以及flash读写

1.掉电检测 CubeMX配置 只需使能PVD中断即可 但是使能了PVD中断后还需要自行配置一些PWR寄存器中的参数&#xff0c;我也通过HAL库进行编写 void PVD_config(void) {//配置PWRPWR_PVDTypeDef sConfigPVD; sConfigPVD.PVDLevel PWR_PVDLEVEL_7; …

Python学习笔记1:Pycharm首次安装环境搭建汉化

Pycharm首次安装环境搭建汉化笔记 1.下载网址 首先下载专业版的pycharm&#xff0c;这里建议下载专业版是因为功能更全面&#xff0c;社区版的往往没有远程调控等实践功能。 网址贴在下方&#xff1a; https://www.jetbrains.com/pycharm/download/?sectionwindows •Profe…

揭秘!财务高手必备的四大分析秘籍,轻松掌握财务奥秘!

导语&#xff1a;在这个信息爆炸的时代&#xff0c;财务数据分析已经成为了企业和个人成功的关键。掌握财务数据分析的精髓&#xff0c;不仅能够揭示企业的财务状况&#xff0c;还能为决策提供有力支持。今天&#xff0c;就让我们一起深入探索财务数据分析的四大秘籍——财务五…

解决gpt无法发送对话的问题

问题描述 如图&#xff0c;今天登上去发现怎么无法发送消息 解决 可能是cookie问题&#xff0c;重新删除了就行了 cookie删除后&#xff0c;需要重新登录&#xff0c;主题色也重置为原来的白色了

摄像机内存卡删除的视频如何恢复?恢复指南来袭

在现代社会&#xff0c;摄像机已成为记录生活、工作和学习的重要设备。然而&#xff0c;随着使用频率的增加&#xff0c;误删或意外丢失视频的情况也时有发生。面对这样的情况&#xff0c;许多用户可能会感到无助和困惑。那么&#xff0c;摄像机内存卡删除的视频真的无法恢复吗…

大语言模型系列-GPT-3.5(ChatGPT)

文章目录 前言一、GPT-3.5的创新点二、GPT-3.5的训练流程SFT数据集RM数据集PPO数据集 三、ChatGPT的诞生总结 前言 《Training language models to follow instructions with human feedback&#xff0c;2022》 前文提到了GPT-3的缺点&#xff0c;其中最大的问题是&#xff1…

面试经典-5-删除有序数组中的重复项

题目 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k &#x…

创建vue3 ts项目 tsc.config在vscode下标红

Vue3TypeScriptPinia初始化项目&#xff0c;vscode报错解决办法&#xff01;_vscode vue3ts 老是提示代码错误-CSDN博客

KNN算法对鸢尾花进行分类:添加网格搜索和交叉验证

优化——添加网格搜索和交叉验证 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection imp…

Claude3发布,将取代ChatGPT4?

目录标题 前言Claude简介Claude 3 的能力高级推理视觉分析代码生成多语言处理 性能比较 前言 一夜之间&#xff0c;全球最强 AI 模型易主。大模型行业再次经历变革。OpenAI 最大的竞争对手 Anthropic 发布了新一代 AI 大模型系列 ——Claude 3。该系列包含三个模型&#xff0c…

【论文阅读】Natural Adversarial Examples 自然对抗的例子

文章目录 一、文章概览&#xff08;一&#xff09;摘要&#xff08;二&#xff09;导论&#xff08;三&#xff09;相关工作 二、IMAGENET-A 和 IMAGENET-O&#xff08;一&#xff09;数据集构造方式&#xff08;二&#xff09;数据收集过程 三、模型的故障模式四、实验&#x…

vscode ubuntu c++运行环境配置

官方教程地址&#xff1a;Get Started with C on Linux in Visual Studio Code&#xff08;Get Started with C on Linux in Visual Studio Code&#xff09; 1、下载安装vscode Visual Studio Code - Code Editing. Redefined&#xff08;Visual Studio Code - Code Editing…

气膜建筑是由什么材料制成的?PVDF膜材的革新应用值得期待吗?

随着科技的不断进步和发展&#xff0c;建筑行业也在不断涌现新型的建筑材料。气膜建筑作为其中一种创新的建筑膜材&#xff0c;在体育馆、运动场馆、展览厅等场所得到了广泛的应用。那么&#xff0c;究竟是什么材料构成了气膜建筑呢&#xff1f;轻空间小编将为您详细介绍。 气膜…

Win11系统启动VMware上虚拟机蓝屏解决办法

背景 最近有在做一个项目的过程中需要使用虚拟机&#xff0c;用原来装好的的Vmware14打开虚拟机&#xff0c;直接蓝屏了&#xff0c;尝试了如下几种方法来解决&#xff0c;最好用的就是第二种&#xff0c;直接下载最新版本(在软件管家中直接下载)。 虚拟机 目前常用的虚拟机软…