系统检查框架使一系列静态检测和校验的方法,用来在Django项目启动的时候判断是否有异常的。它一般用于识别出问题并且提示如何解决这个问题。
检测函数可以在check
方法中触发,在使用runserver
和migrate
的时候也会被触发。不过出于性能上的考虑,checks不会在WSGI中被触发,所以这种时候需要自己执行check
检查的结果会在控制台上展现,假如你觉得不需要,可以在配置文件中使用SILENCED_SYSTEM_CHECKS
就不会警告了
编写你自己的校验器
from django.core.checks import Error, register
@register()
def example_check(app_configs, **kwargs):
errors = []
# ... your check logic here
if check_failed:
errors.append(
Error(
'an error',
hint='A hint.',
obj=checked_object,
id='myapp.E001',
)
)
return errors
模型校验器
字段校验
from django.core import checks
from django.db import models
class RangedIntegerField(models.IntegerField):
def __init__(self, min=None, max=None, **kwargs):
super(RangedIntegerField, self).__init__(**kwargs)
self.min = min
self.max = max
def check(self, **kwargs):
# Call the superclass
errors = super(RangedIntegerField, self).check(**kwargs)
# Do some custom checks and add messages to `errors`:
errors.extend(self._check_min_max_values(**kwargs))
# Return all errors and warnings
return errors
def _check_min_max_values(self, **kwargs):
if (self.min is not None and
self.max is not None and
self.min > self.max):
return [
checks.Error(
'min greater than max.',
hint='Decrease min or increase max.',
obj=self,
id='myapp.E001',
)
]
# When no error, return an empty list
return []
模型校验
class MyModel(models.Model):
@classmethod
def check(cls, **kwargs):
errors = super(MyModel, cls).check(**kwargs)
# ... your own checks ...
return errors