System check framework

Django 1.7中的新功能。

系统检查框架是一组用于验证Django项目的静态检查。它检测常见问题并提供如何修复它们的提示。框架是可扩展的,因此您可以轻松添加自己的检查。

有关如何添加自己的检查并将其与Django的系统检查集成的详细信息,请参阅System check topic guide

Builtin tags

Django的系统检查使用以下标记进行组织:

  • models:检查管理模型,字段和管理器定义。
  • signals:检查信号声明和处理程序注册。
  • admin:检查任何管理网站声明。
  • compatibility:标记版本升级的潜在问题。
  • security:检查安全相关的配置。

某些检查可能会向多个标签注册。

Core system checks

Models

  • models.E001<swappable>的格式不是app_label.app_name
  • models.E002<SETTING>引用<model>
  • models.E003:该模型通过中间模型<app_label>.<model>具有两个多对多关系。
  • models.E004id只能用作字段名称,如果字段也设置为primary_key=True
  • models.E005: The field <field name> from parent model <model> clashes with the field <field name> from parent model <model>.
  • models.E006: The field clashes with the field <field name> from model <model>.
  • models.E007:字段 名称>具有列名称&lt; column name&gt;
  • models.E008index_together必须是列表或元组。
  • models.E009:所有index_together元素必须是列表或元组。
  • models.E010unique_together必须是列表或元组。
  • models.E011:所有unique_together元素必须是列表或元组。
  • models.E012index_together/unique_together是指不存在的字段&lt; field name&gt;
  • models.E013: index_together/unique_together refers to a ManyToManyField <field name>, but ManyToManyFields are not supported for that option.
  • models.E014ordering必须是元组或列表(即使您只想按照一个字段排序)。
  • models.E015: ordering refers to the non-existent field <field name>.
  • models.E016: index_together/unique_together refers to field <field_name> which is not local to model <model>.
  • models.E017:代理模型<model>包含模型字段。
  • models.E018:对于字段<field>,自动生成的列名称过长。对于数据库<alias>,最大长度为 长度>
  • models.E019:M2M字段&lt; M2M 字段>的自动生成列名太长。对于数据库<alias>,最大长度为 长度>
  • models.E020<model>.check()类方法当前被覆盖。

Fields

  • fields.E001:字段名称不能以下划线结尾。
  • fields.E002:字段名称不能包含"__"
  • fields.E003pk是不能用作字段名称的保留字。
  • fields.E004choices必须是可迭代的(例如,列表或元组)。
  • fields.E005choices必须是可迭代的返回(实际 值, / t6> 可读 名称)
  • fields.E006db_index必须是NoneTrueFalse
  • fields.E007:主键不能有null=True
  • fields.E100AutoField必须设置primary_key = True。
  • fields.E110BooleanField不接受空值。
  • fields.E120CharField必须定义max_length属性。
  • fields.E121max_length必须为正整数。
  • fields.W122max_lengthIntegerField配合使用时将被忽略。
  • fields.E130DecimalField必须定义decimal_places属性。
  • fields.E131decimal_places必须是非负整数。
  • fields.E132DecimalField必须定义max_digits属性。
  • fields.E133max_digits必须是非负整数。
  • fields.E134max_digits必须大于或等于decimal_places
  • fields.E140FilePathField必须将allow_filesallow_folders设置为True。
  • fields.E150GenericIPAddressField不能接受空值,如果不允许空值,因为空值存储为null。
  • fields.E160:选项auto_nowauto_now_adddefault是互斥的。这些选项中只能有一个存在。
  • fields.W161:提供固定的默认值。
  • fields.W900IPAddressField已被弃用。对它的支持(除了历史迁移)将在Django 1.9中删除。

File Fields

  • fields.E200unique不是FileField的有效参数。
  • fields.E201primary_key不是FileField的有效参数。
  • fields.E210:由于未安装枕头,无法使用ImageField

Signals

  • 信号.E001<handler>连接到<signal>信号,延迟参考<model>发件人,尚未安装。

Backwards Compatibility

执行以下检查以警告用户由于版本升级可能发生的任何潜在问题。

  • 1_6.W001:某些项目单元测试可能无法按预期执行。由于误报,此检查在Django 1.8中已删除。
  • 1_6.W002BooleanField没有默认值。由于误报,此检查在Django 1.8中已删除。
  • 1_7.W001:Django 1.7更改了MIDDLEWARE_CLASSES.django.contrib.sessions.middleware.SessionMiddlewaredjango.contrib.auth.middleware.AuthenticationMiddlewaredjango.contrib.messages.middleware.MessageMiddleware如果你的项目需要这些中间件,那么你应该配置这个设置。

Admin

管理员检查全部作为admin标记的一部分执行。

对在管理站点注册的任何ModelAdmin(或子类)执行以下检查:

  • admin.E001raw_id_fields的值必须是列表或元组。
  • admin.E002raw_id_fields[n]的值指的是&lt; field name&gt; / t3>,其不是<model>的属性。
  • admin.E003raw_id_fields[n]的值必须是ForeignKeyManyToManyField
  • admin.E004fields必须是列表或元组。
  • admin.E005:指定了fieldsetsfields
  • admin.E006fields包含重复字段。
  • admin.E007fieldsets的值必须是列表或元组。
  • admin.E008fieldsets[n]的值必须是列表或元组。
  • admin.E009fieldsets[n]的值必须为2。
  • admin.E010fieldsets[n][1]的值必须是字典。
  • admin.E011fieldsets[n][1]的值必须包含键fields
  • admin.E012fieldsets[n][1]中有重复字段。
  • admin.E013fields[n]/fieldsets[n][m]不能包含ManyToManyField &lt; field name&gt;,因为该字段手动指定关系模型。
  • admin.E014exclude的值必须是列表或元组。
  • admin.E015exclude的值包含重复字段。
  • admin.E016form的值必须继承BaseModelForm
  • admin.E017filter_vertical的值必须是列表或元组。
  • admin.E018filter_horizontal的值必须是列表或元组。
  • admin.E019: The value of filter_vertical[n]/filter_vertical[n] refers to <field name>, which is not an attribute of <model>.
  • admin.E020filter_vertical[n]/filter_vertical[n]的值必须是ManyToManyField
  • admin.E021radio_fields的值必须是字典。
  • admin.E022radio_fields的值是指&lt; field name&gt; ,其不是<model>的属性。
  • admin.E023radio_fields的值指的是&lt; field name&gt; ,其不是ForeignKey,并且没有choices定义。
  • admin.E024radio_fields [ 名称>]的值必须为admin.HORIZONTALadmin.VERTICAL
  • admin.E025view_on_site的值必须是可调用值或布尔值。
  • admin.E026prepopulated_fields的值必须是字典。
  • admin.E027prepopulated_fields的值指向&lt; field name&gt; ,其不是<model>的属性。
  • admin.E028prepopulated_fields的值是指&lt; field name&gt; ,它不能是DateTimeFieldForeignKeyManyToManyField
  • admin.E029prepopulated_fields [ 名称>]的值必须是列表或元组。
  • admin.E030prepopulated_fields的值指向&lt; field name&gt; ,其不是<model>的属性。
  • admin.E031ordering的值必须是列表或元组。
  • admin.E032ordering的值具有随机排序标记?,但也包含其他字段。
  • admin.E033ordering的值指的是&lt; field name&gt; ,其不是<model>的属性。
  • admin.E034readonly_fields的值必须是列表或元组。
  • admin.E035readonly_fields[n]的值不是可调用的,属性&lt; ModelAdmin class&gt ;或属性<model>

ModelAdmin

对在管理站点注册的任何ModelAdmin执行以下检查:

  • admin.E101save_as的值必须是布尔值。
  • admin.E102save_on_top的值必须是布尔值。
  • admin.E103inlines的值必须是列表或元组。
  • admin.E104&lt; InlineModelAdmin class&gt;必须继承自BaseModelAdmin
  • admin.E105&lt; InlineModelAdmin class&gt;必须具有model属性。
  • admin.E106&lt; InlineModelAdmin class&gt; .model的值必须为Model
  • admin.E107list_display的值必须是列表或元组。
  • admin.E108list_display[n]的值是指<label>,不是可调用的,属性 &lt; ModelAdmin class&gt;<model>上的属性或方法。
  • admin.E109list_display[n]的值不能是ManyToManyField
  • admin.E110list_display_links的值必须是列表,元组或None
  • admin.E111: The value of list_display_links[n] refers to <label>, which is not defined in list_display.
  • admin.E112list_filter的值必须是列表或元组。
  • admin.E113list_filter[n]的值必须继承ListFilter
  • admin.E114list_filter[n]的值不能继承FieldListFilter
  • admin.E115list_filter[n][1]的值必须继承FieldListFilter
  • admin.E116list_filter[n]的值指的是不参考字段的<label>
  • admin.E117list_select_related的值必须是布尔值,元组或列表。
  • admin.E118list_per_page的值必须为整数。
  • admin.E119list_max_show_all的值必须为整数。
  • admin.E120list_editable的值必须是列表或元组。
  • admin.E121list_editable[n]的值指代<label>,其不是<model>
  • admin.E122: The value of list_editable[n] refers to <label>, which is not contained in list_display.
  • admin.E123list_editable[n]的值不能同时位于list_editablelist_display_links中。
  • admin.E124: The value of list_editable[n] refers to the first field in list_display (<label>), which cannot be used unless list_display_links is set.
  • admin.E125list_editable[n]的值指向&lt; field name&gt; / t3>,这是不能通过管理员编辑。
  • admin.E126search_fields的值必须是列表或元组。
  • admin.E127date_hierarchy的值指&lt; field name&gt; ,其不是<model>的属性。
  • admin.E128date_hierarchy的值必须是DateFieldDateTimeField

InlineModelAdmin

对在ModelAdmin上注册为内联的任何InlineModelAdmin执行以下检查。

  • admin.E201:无法排除字段&lt; field name&gt; 父模型<app_label>.<model>
  • admin.E202: <model> has no ForeignKey to <parent model>./ <model> has more than one ForeignKey to <parent model>.
  • admin.E203extra的值必须为整数。
  • admin.E204max_num的值必须为整数。
  • admin.E205min_num的值必须为整数。
  • admin.E206formset的值必须继承BaseModelFormSet

GenericInlineModelAdmin

对在ModelAdmin上注册为内联的任何GenericInlineModelAdmin执行以下检查。

  • admin.E301'ct_field'参考<label>,不是<model>
  • admin.E302'ct_fk_field'参考<label>,不是<model>
  • admin.E303<model>没有GenericForeignKey
  • admin.E304: <model> has no GenericForeignKey using content type field <field name> and object ID field <field name>.

Auth

  • auth.E001REQUIRED_FIELDS必须是列表或元组。
  • auth.E002:自定义用户模型的名为USERNAME_FIELD的字段不能包含在REQUIRED_FIELDS中。
  • auth.E003<field>必须是唯一的,因为它被命名为USERNAME_FIELD
  • auth.W004<field>命名为USERNAME_FIELD,但不是唯一的。

Content Types

当模型包含GenericForeignKeyGenericRelation时,将执行以下检查:

  • contenttypes.E001GenericForeignKey对象ID引用不存在的字段<field>
  • contenttypes.E002GenericForeignKey内容类型引用不存在的字段<field>
  • contenttypes.E003<field>不是ForeignKey
  • contenttypes.E004<field>不是ForeignKeycontenttypes.ContentType

Security

安全检查不会使您的网站安全。他们不审计代码,做入侵检测,或做任何特别复杂的事情。相反,他们帮助执行自动化,低挂的水果清单。它们可以帮助您记住提高网站安全性的简单操作。

其中一些检查可能不适合您的特定部署配置。例如,如果您在负载平衡器中执行HTTP到HTTPS重定向,则会不经常警告您未启用SECURE_SSL_REDIRECT使用SILENCED_SYSTEM_CHECKS可停止不需要的检查。

如果您使用check命令的--deploy选项,将运行以下检查:

Sites

使用CurrentSiteManager在任何模型上执行以下检查:

  • sites.E001: CurrentSiteManager could not find a field named <field name>.
  • sites.E002CurrentSiteManager不能使用<field>,因为它不是ForeignKeyManyToManyField

Database

MySQL

如果您使用MySQL,将执行以下检查:

  • mysql.E001:MySQL不允许唯一的CharField具有max_length> 255。