시스템 점검 프레임워크Link to this heading
시스템 검사 프레임워크는 Django 프로젝트의 유효성을 검사하기 위한 일련의 정적 검사입니다. 일반적인 문제를 감지하고 해결 방법에 대한 힌트를 제공합니다. 프레임워크는 확장 가능하므로 자체 검사를 쉽게 추가할 수 있습니다.
자신의 검사를 추가하고 Django의 시스템 검사와 통합하는 방법에 대한 자세한 내용은 :doc:`System check topic guide </topics/checks>`을 참조하십시오.
API 레퍼런스Link to this heading
“체크 메세지”Link to this heading
- class CheckMessage(level, msg, hint=None, obj=None, id=None)Link to this definition
시스템 검사에서 발생하는 경고 및 오류는 ``CheckMessage``의 인스턴스여야 합니다. 인스턴스는 보고 가능한 단일 오류 또는 경고를 캡슐화합니다. 또한 메시지에 적용할 수 있는 컨텍스트 및 힌트와 필터링 목적으로 사용되는 고유 식별자를 제공합니다.
생성자 인수는 다음과 같습니다:
- “레벨”
메시지의 심각도입니다. 미리 정의된 값 중 하나를 사용합니다:
DEBUG,INFO,WARNING,ERROR,CRITICAL. 레벨이 ``ERROR``보다 크거나 같으면, Django는 관리 명령이 실행되지 않도록 합니다. ``ERROR``보다 낮은 수준의 메시지(예: 경고)는 콘솔에 보고되지만 음소거될 수 있습니다.- “msg”
문제를 설명하는 짧은(80자 미만) 문자열입니다. 문자열은 개행 문자를 포함하지 않아야 합니다.
- “힌트”
문제 해결을 위한 힌트를 제공하는 한 줄 문자열입니다. 힌트를 제공할 수 없거나, 오류 메시지에서 힌트가 자명한 경우 힌트를 생략하거나
None값을 사용할 수 있습니다.- “오브젝트”
선택 사항. 메시지에 대한 컨텍스트를 제공하는 객체(예: 문제가 발견된 모델). 객체는 모델, 필드, 관리자 또는
__str__()메서드를 정의하는 다른 객체여야 합니다. 이 메서드는 모든 메시지를 보고할 때 사용되며 그 결과가 메시지보다 우선합니다.- “아이디”
선택적 문자열. 문제의 고유 식별자. 식별자는
applabel.X001패턴을 따라야 합니다. 여기서X``는 메시지 심각도를 나타내는 ``CEWID문자 중 하나입니다(중요의 경우C, 오류의 경우E). 등등). 번호는 애플리케이션에서 할당할 수 있지만, 해당 애플리케이션 내에서 고유한 값이어야 합니다.
공통 수준으로 메시지를 더 쉽게 만들 수 있는 하위 클래스가 있습니다. 그것들을 사용할 때 level 인수는 클래스 이름에 의해 암시되기 때문에 생략할 수 있습니다.
- class Debug(msg, hint=None, obj=None, id=None)Link to this definition
- class Info(msg, hint=None, obj=None, id=None)Link to this definition
- class Warning(msg, hint=None, obj=None, id=None)Link to this definition
- class Error(msg, hint=None, obj=None, id=None)Link to this definition
- class Critical(msg, hint=None, obj=None, id=None)Link to this definition
핵심 시스템 체크Link to this heading
비동기 지원Link to this heading
다음 검사는 :doc:`/topics/async`에 대한 설정을 확인합니다:
async.E001: 배포 시
DJANGO_ALLOW_ASYNC_UNSAFE환경 변수를 설정하면 안 됩니다. 설정하면 :ref:`비동기 안전 보호 <async-safety>`이 비활성화됩니다.
이전 버전과의 호환성Link to this heading
호환성 검사는 Django를 업그레이드한 후 발생할 수 있는 잠재적 문제에 대해 경고합니다.
캐시들Link to this heading
다음 검사는 CACHES 설정이 올바르게 구성되었는지 확인합니다:
caches.E001:
CACHES설정에서'default'캐시를 정의해야 합니다.caches.W002:
<cache>구성은 해당LOCATION <CACHES-LOCATION>`가 :setting:`MEDIA_ROOT/STATIC_ROOT/:setting:`STATICFILES_DIRS`와 일치/내부에 있음/포함하고 있기 때문에 캐시를 노출하거나 데이터 손상으로 이어질 수 있습니다.caches.W003:
<cache>캐시 :setting:`LOCATION <CACHES-LOCATION>`는 상대적입니다. 대신 절대 경로를 사용하십시오.
데이터베이스Link to this heading
MySQL 과 MariaDBLink to this heading
MySQL 또는 MariaDB를 사용하는 경우, 다음 검사가 수행됩니다:
mysql.E001: MySQL/MariaDB는 고유한
CharFields가max_length> 255를 갖는 것을 허용하지 않습니다. 이 검사는 실제 최대 크기는 여러 요인에 따라 달라지므로 Django 3.1에서*``mysql.W003``*으로 변경되었습니다.mysql.W002: 데이터베이스 연결 ``<alias>``에 대해 MySQL/MariaDB Strict Mode가 설정되지 않았습니다. :ref:`mysql-sql-mode`를 참조하십시오.
mysql.W003: MySQL/MariaDB는 고유한
CharFields가max_length> 255를 갖는 것을 허용하지 않을 수 있습니다.
파일 관리하기Link to this heading
다음 검사는 :doc:`/topics/files`에 대한 설정을 확인합니다:
files.E001:
FILE_UPLOAD_TEMP_DIR설정은 존재하지 않는 디렉토리 ``<path>``을 참조합니다.
모델 필드들Link to this heading
fields.E001: 필드 이름은 underscore로 끝나서는 안됩니다.
fields.E003: ``pk``는 필드 이름으로 사용될 수 없는 예약어입니다.
fields.E004:
choicesmust be a mapping (e.g. a dictionary) or an iterable (e.g. a list or tuple).fields.E005:
choicesmust be a mapping of actual values to human readable names or an iterable containing(actual value, human readable name)tuples.fields.E006:
db_index``는 ``None,True또는False중 하나여야 합니다.fields.E007: Primary key는 ``null=True``여서는 안됩니다.
fields.E008: 모든 ``validators``는 호출 가능해야 합니다.
fields.E009:
max_length``가 너무 작아 ``choices``(``<count>문자)의 가장 긴 값에 맞지 않습니다.fields.E010:
<field>기본값은 모든 필드 인스턴스 간에 공유되지 않도록 인스턴스 대신 콜러블이어야 합니다.fields.E011:
<database>does not support default database values with expressions (db_default).fields.E012:
<expression>cannot be used indb_default.fields.E013:
CompositePrimaryKeymust be namedpk.fields.E100: ``AutoField``는 primary_key=True로 설정되어야 합니다.
fields.E110:
BooleanFields는 null 값을 허용하지 않습니다. 이 검사는 Django 2.1에서 null 값 지원이 추가되기 전에 나타났습니다.fields.E120:
CharField``는 ``max_length속성을 정의해야 합니다.fields.E121: ``max_length``는 양의 정수여야 합니다.
fields.W122: ``max_length``는 ``<integer field type>``과 함께 사용할 때 무시됩니다.
fields.E130:
DecimalFields는decimal_places속성을 정의해야 합니다.fields.E131: ``decimal_places``는 음이 아닌 정수여야 합니다.
fields.E132:
DecimalFields는max_digits속성을 정의해야 합니다.fields.E133: ``max_digits``는 양의 정수여야 합니다.
fields.E134: ``max_digits``는 ``decimal_places``보다 크거나 같아야 합니다.
fields.E140:
FilePathFields에는allow_files또는 ``allow_folders``가 True로 설정되어 있어야 합니다.fields.E150:
GenericIPAddressFields는 ``null=False``인 경우 ``blank=True``를 가질 수 없습니다. 빈 값은 null로 저장되기 때문입니다.fields.E160:
auto_now,auto_now_add및default옵션은 상호 배타적입니다. 이러한 옵션 중 하나만 존재할 수 있습니다.fields.W161: 고정된 기본값이 제공됩니다.
fields.W162:
<database>``은 ``<field data type>열에 대한 데이터베이스 인덱스를 지원하지 않습니다.fields.W163:
<database>은 열에 대한 설명을 지원하지 않습니다. (db_comment).fields.E170: ``BinaryField``의 ``default``는 문자열일 수 없습니다. 대신 바이트 콘텐츠를 사용하세요.
fields.E180:
<database>``은 ``JSONFields를 지원하지 않습니다.fields.E190:
<database>``은 ``<field_type>s에서 데이터베이스 데이터 정렬을 지원하지 않습니다.fields.E220:
<database>does not supportGeneratedFields.fields.E221:
<database>does not support non-persistedGeneratedFields.fields.E222:
<database>does not support persistedGeneratedFields.fields.E223:
GeneratedField.output_fieldhas errors: …fields.W224:
GeneratedField.output_fieldhas warnings: …fields.E900: 이전 마이그레이션 지원을 제외하고 ``IPAddressField``가 제거되었습니다.
fields.W900: ``IPAddressField``는 더 이상 사용되지 않습니다. 이에 대한 지원(이전 마이그레이션 제외)은 Django 1.9에서 제거됩니다. 이 검사는 Django 1.7 및 1.8에서 나타납니다.
fields.W901: ``CommaSeparatedIntegerField``는 더 이상 사용되지 않습니다. 이에 대한 지원(이전 마이그레이션 제외)은 Django 2.0에서 제거됩니다. 이 검사는 Django 1.10 및 1.11에서 나타납니다.
fields.E901: ``CommaSeparatedIntegerField``는 이전 마이그레이션 지원을 제외하고 제거되었습니다.
fields.W902: ``FloatRangeField``는 더 이상 사용되지 않으며 Django 3.1에서 제거됩니다. 이 검사는 Django 2.2 및 3.0에서 나타납니다.
fields.W903: ``NullBooleanField``는 더 이상 사용되지 않습니다. 이에 대한 지원(이전 마이그레이션 제외)은 Django 4.0에서 제거됩니다. 이 검사는 Django 3.1 및 3.2에서 나타납니다.
fields.E903: 이전 마이그레이션 지원을 제외하고 ``NullBooleanField``가 제거되었습니다.
fields.W904: ``django.contrib.postgres.fields.JSONField``는 더 이상 사용되지 않습니다. 이에 대한 지원(이전 마이그레이션 제외)은 Django 4.0에서 제거됩니다. 이 검사는 Django 3.1 및 3.2에서 나타납니다.
fields.E904: ``django.contrib.postgres.fields.JSONField``는 이전 마이그레이션 지원을 제외하고 제거되었습니다.
fields.W905:
django.contrib.postgres.fields.CICharFieldis deprecated. Support for it (except in historical migrations) will be removed in Django 5.1. This check appeared in Django 4.2 and 5.0.fields.E905:
django.contrib.postgres.fields.CICharFieldis removed except for support in historical migrations.fields.W906:
django.contrib.postgres.fields.CIEmailFieldis deprecated. Support for it (except in historical migrations) will be removed in Django 5.1. This check appeared in Django 4.2 and 5.0.fields.E906:
django.contrib.postgres.fields.CIEmailFieldis removed except for support in historical migrations.fields.W907:
django.contrib.postgres.fields.CITextFieldis deprecated. Support for it (except in historical migrations) will be removed in Django 5.1. This check appeared in Django 4.2 and 5.0.fields.E907:
django.contrib.postgres.fields.CITextFieldis removed except for support for historical migrations.
파일 필드Link to this heading
모델Link to this heading
models.E001:
<swappable>``은 ``app_label.app_name형식이 아닙니다.models.E002: ``<SETTING>``은 설치되지 않았거나 추상적인 ``<model>``를 참조합니다.
models.E003: 모델은 중간 모델 ``<app_label>.<model>``를 통해 두 개의 동일한 다대다 관계를 가집니다.
models.E004: ``id``는 필드가 ``primary_key=True``도 설정한 경우에만 필드 이름으로 사용할 수 있습니다.
models.E005: 상위 모델
<model>``의 ``<field name>필드가 상위 모델<model>``의 ``<field name>필드와 충돌합니다.models.E006: 필드 ``<field name>``이 모델 ``<model>``의 필드 ``<field name>``와 충돌합니다.
models.E007: 필드 ``<field name>``에는 다른 필드에서 사용하는 열 이름 ``<column name>``가 있습니다.
models.E008:
index_togethermust be a list or tuple. This check appeared before Django 5.1.models.E009: All
index_togetherelements must be lists or tuples. This check appeared before Django 5.1.models.E010: ``unique_together``는 반드시 리스트 이거나 투플이어야 합니다.
models.E011: 모든
unique_together요소는 목록 또는 튜플이어야 합니다.models.E012:
constraints/indexes/unique_togetherrefers to the nonexistent field<field name>.models.E013:
constraints/indexes/unique_togetherrefers to aManyToManyField<field name>, butManyToManyFields are not supported for that option.models.E014: ``ordering``은 (하나의 필드로만 주문하려는 경우에도) 튜플 또는 리스트이어야 합니다.
models.E015: ``ordering``은 존재하지 않는 필드, 관련 필드 또는 조회 ``<field name>``을 나타냅니다.
models.E016:
constraints/indexes/unique_togetherrefers to field<field_name>which is not local to model<model>.models.E017: 프록시 모델 ``<model>``에는 모델 필드가 포함되어 있습니다.
models.E018: 자동 생성된 열 이름이 필드 ``<field>``에 비해 너무 깁니다. 데이터베이스 ``<alias>``의 최대 길이는 ``<maximum length>``입니다.
models.E019: M2M 필드 ``<M2M field>``에 대해 자동 생성된 열 이름이 너무 깁니다. 데이터베이스 ``<alias>``의 최대 길이는 ``<maximum length>``입니다.
models.E020:
<model>.check()클래스 메서드가 현재 재정의되었습니다.models.E021:
ordering및 ``order_with_respect_to``는 함께 사용할 수 없습니다.models.E022: ``<function>``에는 ``<app label>.<model>``에 대한 지연 참조가 포함되어 있지만 앱 ``<app label>``는 설치되지 않았거나 모델 ``<model>``를 제공하지 않습니다.
models.E023: 모델 이름 ``<model>``은 쿼리 조회 구문과 충돌하므로 밑줄로 시작하거나 끝날 수 없습니다.
models.E024: 모델 이름 ``<model>``은 쿼리 조회 구문과 충돌하므로 이중 밑줄을 포함할 수 없습니다.
models.E025: 속성 ``<property name>``이 관련 필드 접근자와 충돌합니다.
models.E026: 모델은 ``primary_key=True``인 필드를 두 개 이상 가질 수 없습니다.
models.W027: ``<database>``은 검사 제약 조건을 지원하지 않습니다.
models.E028:
db_table<db_table>``은 여러 모델에서 사용됩니다: ``<model list>.models.E030: 인덱스 이름
<index>``은 모델 간에 고유하지 않습니다: ``<model list>.models.E031: 구속조건 이름 ``<constraint>``은 모델 ``<model>``에 대해 고유하지 않습니다.
models.E032: 제약 조건 이름
<constraint>``은 모델 간에 고유하지 않습니다: ``<model list>.models.E033: 인덱스 이름 ``<index>``은 밑줄이나 숫자로 시작할 수 없습니다.
models.E034: 인덱스 이름
<index>``은 ``<max_length>문자보다 길 수 없습니다.models.W035:
db_table<db_table>``은 여러 모델에서 사용됩니다: ``<model list>.models.W036: ``<database>``은 조건이 있는 고유 제약 조건을 지원하지 않습니다.
models.W037: ``<database>``은 조건이 있는 인덱스를 지원하지 않습니다.
models.W038: ``<database>``은 지연 가능한 고유 제약 조건을 지원하지 않습니다.
models.W039: ``<database>``은 키가 아닌 열이 있는 고유 제약 조건을 지원하지 않습니다.
models.W040: ``<database>``은 키가 아닌 열이 있는 인덱스를 지원하지 않습니다.
models.E041: ``constraints``는 조인된 필드 ``<field name>``을 참조합니다.
models.E042:
<field name>cannot be included in the composite primary key.models.W042: 기본 키 유형을 정의하지 않을 때 사용되는 자동 생성 기본 키(기본적으로
django.db.models.AutoField).models.W043: ``<database>``은 식에 대한 인덱스를 지원하지 않습니다.
models.W044: ``<database>``은 식에 대한 고유 제약 조건을 지원하지 않습니다.
models.W045: 검사 제약 조건
<constraint>``에는 ``RawSQL()표현식이 포함되어 있으며 모델full_clean()동안 유효성이 검사되지 않습니다.models.W046:
<database>는 테이블에 대한 설명을 지원하지 않습니다.(db_table_comment).models.W047:
<database>does not support unique constraints with nulls distinct.models.E048:
constraints/indexes/unique_togetherrefers to aCompositePrimaryKey<field name>, butCompositePrimaryKeys are not supported for that option.
Management CommandsLink to this heading
The following checks verify custom management commands are correctly configured:
commands.E001: The
migrateandmakemigrationscommands must have the sameautodetector.
보안Link to this heading
보안 검사는 사이트를 안전하게 만들지 않습니다. 코드를 감사하거나, 침입 탐지를 수행하거나, 특히 복잡한 작업을 수행하지 않습니다. 오히려, 사이트의 보안을 개선하는 데 도움이 될 수 있는 자동화된 간단한 체크리스트를 수행하는 데 도움이 됩니다.
이러한 검사 중 일부는 특정 배포 구성에 적합하지 않을 수 있습니다. 예를 들어 로드 밸런서에서 HTTP에서 HTTPS로의 리디렉션을 수행하는 경우 :setting:`SECURE_SSL_REDIRECT`를 활성화하지 않은 것에 대해 지속적으로 경고를 받으면 짜증이 날 것입니다. 불필요한 검사를 중지하려면 :setting:`SILENCED_SYSTEM_CHECKS`를 사용하세요.
check --deploy 옵션을 사용하는 경우, 다음 검사가 실행됩니다:
security.W001:
MIDDLEWARE`에 :class:`django.middleware.security.SecurityMiddleware`가 없으므로 :setting:`SECURE_HSTS_SECONDS,SECURE_CONTENT_TYPE_NOSNIFF, :setting :SECURE_REFERRER_POLICY,SECURE_CROSS_ORIGIN_OPENER_POLICY및SECURE_SSL_REDIRECT설정은 적용되지 않습니다.security.W002:
MIDDLEWARE`에 :class:`django.middleware.clickjacking.XFrameOptionsMiddleware`가 없으므로 페이지가 `’x-frame-options’``와 함께 제공되지 않습니다. 헤더. 사이트를 프레임으로 제공해야 하는 타당한 이유가 없는 한, 이 헤더를 활성화하여 클릭재킹 공격을 방지하는 것이 좋습니다.security.W003: 현재 미들웨어(
django.middleware.csrf.CsrfViewMiddleware가MIDDLEWARE안에 없습니다)를 통한 Django에 내재된 사이트 간 요청 위조 보호 기능을 사용하지 않는 것 같습니다. 미들웨어를 활성화하는 것이 허점을 남기지 않도록 하는 가장 안전한 방법입니다.security.W004:
SECURE_HSTS_SECONDS설정에 대한 값을 설정하지 않았습니다. 전체 사이트가 SSL을 통해서만 제공되는 경우 값을 설정하고 :ref:`HTTP Strict Transport Security <http-strict-transport-security>`을 활성화하는 것이 좋습니다. 설명서를 먼저 읽으십시오. 부주의하게 HSTS를 활성화하면 돌이킬 수 없는 심각한 문제가 발생할 수 있습니다.security.W005:
SECURE_HSTS_INCLUDE_SUBDOMAINS설정을 ``True``로 설정하지 않았습니다. 이것이 없으면, 귀하의 사이트는 하위 도메인에 대한 안전하지 않은 연결을 통한 공격에 잠재적으로 취약합니다. 도메인의 모든 하위 도메인이 SSL을 통해서만 제공되어야 한다고 확신하는 경우에만 ``True``로 설정하십시오.security.W006:
SECURE_CONTENT_TYPE_NOSNIFF설정이 ``True``로 설정되지 않았으므로 페이지가 ``’X-Content-Type-Options: nosniff’``와 함께 제공되지 않습니다. 헤더. 브라우저가 콘텐츠 유형을 잘못 식별하지 않도록 이 헤더를 활성화하는 것을 고려해야 합니다.security.W007:
SECURE_BROWSER_XSS_FILTER설정이True``로 설정되어 있지 않으므로 페이지에 ``'X-XSS-Protection: 1; mode=block'헤더. 브라우저의 XSS 필터링을 활성화하고 XSS 공격을 방지하려면 이 헤더를 활성화하는 것을 고려해야 합니다. 이 검사는 Django 3.0에서 * ``X-XSS-Protection`` *헤더가 최신 브라우저에서 더 이상 인정되지 않으므로 제거되었습니다.security.W008:
SECURE_SSL_REDIRECT설정이 ``True``로 설정되지 않았습니다. SSL 및 비 SSL 연결 모두에서 사이트를 사용할 수 있어야 하는 경우가 아니면 이 설정을 ``True``로 설정하거나 로드 밸런서 또는 리버스 프록시 서버를 구성하여 모든 연결을 HTTPS로 리디렉션할 수 있습니다.security.W009:
SECRET_KEY`의 문자가 50자 미만이거나, 고유 문자가 5자 미만이거나, Django에서 자동으로 생성되었음을 나타내는 `’django-insecure-‘`` 접두사가 붙습니다. 긴 무작위 값을 생성하십시오. 그렇지 않으면 Django의 보안에 중요한 많은 기능이 공격에 취약합니다.security.W010: 설정:`INSTALLED_APPS`에 :mod:`django.contrib.sessions`가 있지만, :setting:`SESSION_COOKIE_SECURE`를 ``True``로 설정하지 않았습니다. :setting:`SESSION_COOKIE_SECURE`를 ``True``로 설정하면 네트워크 트래픽 스니퍼가 사용자 세션을 하이재킹하기가 더 어려워집니다.
security.W011: :setting:`MIDDLEWARE`에 :class:`django.contrib.sessions.middleware.SessionMiddleware`가 있지만 :setting:`SESSION_COOKIE_SECURE`를 ``True``로 설정하지 않았습니다. 보안 전용 세션 쿠키를 사용하면 네트워크 트래픽 스니퍼가 사용자 세션을 하이재킹하기가 더 어려워집니다.
security.W012: :setting:`SESSION_COOKIE_SECURE`가 ``True``로 설정되지 않았습니다. 보안 전용 세션 쿠키를 사용하면 네트워크 트래픽 스니퍼가 사용자 세션을 하이재킹하기가 더 어려워집니다.
security.W013: :setting:NSTALLED_APPS`에 django.contrib.sessions가 있지만 설정:SESSION_COOKIE_HTTPONLY`를 ``True``로 설정하지 않았습니다. ``HttpOnly` 세션 쿠키를 사용하면 크로스 사이트 스크립팅 공격이 사용자 세션을 하이재킹하는 것이 더 어려워집니다.
security.W014:
MIDDLEWARE`에 :class:`django.contrib.sessions.middleware.SessionMiddleware`가 있지만 :setting:`SESSION_COOKIE_HTTPONLY`를 ``True``로 설정하지 않았습니다. . ``HttpOnly`세션 쿠키를 사용하면 크로스 사이트 스크립팅 공격이 사용자 세션을 하이재킹하는 것이 더 어려워집니다.security.W015:
SESSION_COOKIE_HTTPONLY`가 ``True``로 설정되지 않았습니다. ``HttpOnly`세션 쿠키를 사용하면 크로스 사이트 스크립팅 공격이 사용자 세션을 하이재킹하는 것이 더 어려워집니다.security.W016: :setting:`CSRF_COOKIE_SECURE`가 ``True``로 설정되지 않았습니다. 보안 전용 CSRF 쿠키를 사용하면 네트워크 트래픽 스니퍼가 CSRF 토큰을 훔치기가 더 어려워집니다.
security.W017:
CSRF_COOKIE_HTTPONLY`가 ``True``로 설정되지 않았습니다. ``HttpOnly`CSRF 쿠키를 사용하면 교차 사이트 스크립팅 공격이 CSRF 토큰을 훔치기가 더 어려워집니다. 이 검사는 Django 1.11에서CSRF_COOKIE_HTTPONLY설정이 실질적인 이점을 제공하지 않기 때문에 제거되었습니다.security.W019:
MIDDLEWARE`에 :class:`django.middleware.clickjacking.XFrameOptionsMiddleware`가 있지만 :setting:`X_FRAME_OPTIONS`가 `’DENY’``로 설정되지 않았습니다. 귀하의 사이트가 프레임의 다른 부분을 제공해야 할 타당한 이유가 없다면 ``’DENY’’로 변경해야 합니다.security.W020: :setting:`ALLOWED_HOSTS`는 배포 시 비어 있으면 안 됩니다.
security.W021:
SECURE_HSTS_PRELOAD설정을 ``True``로 설정하지 않았습니다. 이것이 없으면 사이트를 브라우저 사전 로드 목록에 제출할 수 없습니다.security.W022:
SECURE_REFERRER_POLICY설정을 지정하지 않았습니다. 이것이 없으면 귀하의 사이트는 Referrer-Policy 헤더를 보내지 않습니다. 사용자 개인 정보를 보호하려면 이 헤더를 활성화하는 것을 고려해야 합니다.security.E023:
SECURE_REFERRER_POLICY설정을 잘못된 값으로 설정했습니다.security.E024:
SECURE_CROSS_ORIGIN_OPENER_POLICY설정을 잘못된 값으로 설정했습니다.security.W025:
SECRET_KEY_FALLBACKS[n] <SECRET_KEY_FALLBACKS>`의 문자가 50자 미만이거나 고유 문자가 5자 미만이거나 Django에 의해 자동으로 생성되었음을 나타내는 `’django-insecure-‘`` 접두사가 붙어 있습니다. 길고 임의의 값을 생성하십시오. 그렇지 않으면 Django의 보안에 중요한 많은 기능이 공격에 취약합니다.
다음 검사는 보안 관련 설정이 올바르게 구성되었는지 확인합니다:
시그널Link to this heading
템플릿Link to this heading
다음 검사는 TEMPLATES 설정이 올바르게 구성되었는지 확인합니다:
templates.E001: You have
'APP_DIRS': Truein yourTEMPLATESbut also specify'loaders'inOPTIONS. Either removeAPP_DIRSor remove the'loaders'option. This check is removed in Django 5.1 as system checks may now raiseImproperlyConfiguredinstead.templates.E002:
string_if_invalidinTEMPLATESOPTIONS <TEMPLATES-OPTIONS>`은 문자열이어야 하지만 다음과 같았습니다: ``{value}`({type}) .templates.E003:
<name>``은 여러 템플릿 태그 모듈에 사용됩니다: ``<module list>. *이 검사는 Django 4.1.2*에서 *``templates.W003``으로 변경되었습니다.templates.W003:
<name>``은 여러 템플릿 태그 모듈에 사용됩니다: ``<module list>.
번역Link to this heading
변환 구성에서 다음 검사가 수행됩니다:
translation.E001:
LANGUAGE_CODE설정에 잘못된 값을 제공했습니다:<value>.translation.E002:
LANGUAGES설정: ``<value>``에 잘못된 언어 코드를 제공했습니다.translation.E003:
LANGUAGES_BIDI설정: ``<value>``에 잘못된 언어 코드를 제공했습니다.translation.E004:
LANGUAGES설정에 없는 값을LANGUAGE_CODE설정에 제공했습니다.
URL들Link to this heading
URL 구성에서 다음 검사가 수행됩니다:
urls.W001: URL 패턴 ``<pattern>``은 ``$``로 끝나는 ``route``와 함께 :func:`~django.urls.include`를 사용합니다. URL을 포함한 문제를 피하기 위해 ``route``에서 달러 기호를 제거하십시오.
urls.W002: URL 패턴 ``<pattern>``에 ``/``로 시작하는 ``route``가 있습니다. 이 슬래시는 불필요하므로 제거하십시오. 이 패턴이
include()패턴 뒤에 ``/``가 있는지 확인하십시오.urls.W003: URL 패턴 ``<pattern>``에 ``:``을 포함하는 ``이름``이 있습니다. 모호한 네임스페이스 참조를 방지하려면 콜론을 제거하십시오.
urls.E004: URL 패턴 ``<pattern>``이 잘못되었습니다. ``urlpatterns``가
path()및/또는re_path()인스턴스의 목록인지 확인하십시오.urls.W005: URL 네임스페이스 ``<namespace>``이 고유하지 않습니다. 이 네임스페이스의 모든 URL을 되돌릴 수 없을 수도 있습니다.
urls.E006:
MEDIA_URL/STATIC_URL설정은 슬래시로 끝나야 합니다.urls.E007: 사용자 지정
handlerXXX보기 ``’path.to.view’``가 올바른 수의 인수를 사용하지 않습니다(…).urls.E008: 사용자 지정
handlerXXX보기 ``’path.to.view’``를 가져올 수 없습니다.urls.E009: URL 패턴
<pattern>``에 유효하지 않은 보기가 있습니다. ``<view>대신 ``<view>.as_view()``를 전달하십시오.urls.W010: Your URL pattern
<pattern>has an unmatched<angle bracket>.
“contrib” 앱 체크들Link to this heading
관리자Link to this heading
관리 검사는 모두 admin 태그의 일부로 수행됩니다.
관리 사이트에 등록된 :class:`~django.contrib.admin.ModelAdmin`(또는 하위 클래스)에서 다음 검사가 수행됩니다:
admin.E001:
raw_id_fields값은 리스트 또는 튜플이어야 합니다.admin.E002:
raw_id_fields[n]값은<model>필드가 아닌 ``<field name>``을 나타냅니다.admin.E003:
raw_id_fields[n]값은 외래 키 또는 다대다 필드여야 합니다.admin.E004:
fields값은 리스트 또는 튜플이어야 합니다.admin.E006:
fields값에 중복 필드가 포함되어 있습니다.admin.E007:
fieldsets값은 리스트 또는 튜플이어야 합니다.admin.E008:
fieldsets[n]값은 리스트 또는 튜플이어야 합니다.admin.E009: ``fieldsets[n]``의 값은 길이가 2여야 합니다.
admin.E010:
fieldsets[n][1]값은 사전이어야 합니다.admin.E011:
fieldsets[n][1]값은fields키를 포함해야 합니다.admin.E012: ``fieldsets[n][1]``에 중복된 필드가 있습니다.
admin.E013: The value of
fields[n]/filter_horizontal[n]/filter_vertical[n]/fieldsets[n][m]cannot include theManyToManyField<field name>, because that field manually specifies a relationship model.admin.E014:
exclude값은 리스트 또는 튜플이어야 합니다.admin.E015:
exclude값에 중복 필드가 포함되어 있습니다.admin.E016:
form값은 ``BaseModelForm``에서 상속되어야 합니다.admin.E017:
filter_vertical값은 리스트 또는 튜플이어야 합니다.admin.E018:
filter_horizontal값은 리스트 또는 튜플이어야 합니다.admin.E019:
filter_vertical[n]/filter_horizontal[n]값은<model>필드가 아닌 ``<field name>``을 참조합니다.admin.E020:
filter_vertical[n]/filter_horizontal[n]값은 다대다 필드여야 합니다.admin.E021:
radio_fields값은 사전이어야 합니다.admin.E022:
radio_fields값은 ``<model>``의 필드가 아닌 ``<field name>``을 참조합니다.admin.E023:
radio_fields값은ForeignKey인스턴스가 아닌<field name>``을 참조하며 ``choices정의가 없습니다.admin.E024:
radio_fields[<field name>]값은admin.HORIZONTAL또는 ``admin.VERTICAL``이어야 합니다.admin.E025:
view_on_site값은 호출 가능하거나 부울 값이어야 합니다.admin.E026:
prepopulated_fields값은 사전이어야 합니다.admin.E027:
prepopulated_fields값은<model>필드가 아닌 ``<field name>``을 참조합니다.admin.E028:
prepopulated_fields값은<field name>``을 참조하며, ``DateTimeField,ForeignKey,OneToOneField또는ManyToManyField필드가 아니어야 합니다.admin.E029:
prepopulated_fields[<field name>]값은 목록 또는 튜플이어야 합니다.admin.E030:
prepopulated_fields값은 ``<model>``의 필드가 아닌 ``<field name>``을 참조합니다.admin.E031:
ordering값은 리스트 또는 튜플이어야 합니다.admin.E032:
ordering값에는 무작위 순서 마커 ``?``가 있지만, 다른 필드도 포함합니다.admin.E033:
ordering값은<model>필드가 아닌 ``<field name>``을 나타냅니다.admin.E034:
readonly_fields값은 목록 또는 튜플이어야 합니다.admin.E035: The value of
readonly_fields[n]refers to<field_name>, which is not a callable, an attribute of<ModelAdmin class>, or an attribute of<model>.admin.E036:
autocomplete_fields값은 리스트 또는 튜플이어야 합니다.admin.E037:
autocomplete_fields[n]값은<model>필드가 아닌 ``<field name>``을 참조합니다.admin.E038:
autocomplete_fields[n]값은 외래 키 또는 다대다 필드여야 합니다.admin.E039: 모델 ``<model>``에 대한 관리자는 ``<modeladmin>.autocomplete_fields``에 의해 참조되도록 등록되어야 합니다.
admin.E040: ``<modeladmin>``은 ``<other_modeladmin>.autocomplete_fields``에 의해 참조되기 때문에, ``search_fields``를 정의해야 합니다.
모델 관리자Link to this heading
관리 사이트에 등록된 :class:`~django.contrib.admin.ModelAdmin`에서 다음 검사가 수행됩니다:
admin.E101:
save_as값은 부울이어야 합니다.admin.E102:
save_on_top값은 부울이어야 합니다.admin.E103:
inlines값은 리스트 또는 튜플이어야 합니다.admin.E104: ``<InlineModelAdmin class>``은 ``InlineModelAdmin``에서 상속해야 합니다.
admin.E105:
<InlineModelAdmin class>``에는 ``model속성이 있어야 합니다.admin.E106:
<InlineModelAdmin class>.model값은 ``Model``이어야 합니다.admin.E107:
list_display값은 리스트 또는 튜플이어야 합니다.admin.E108: The value of
list_display[n]refers to<label>, which is not a callable or attribute of<ModelAdmin class>, or an attribute, method, or field on<model>.admin.E109: The value of
list_display[n]must not be a many-to-many field or a reverse foreign key.admin.E110:
list_display_links값은 리스트, 튜플 또는 ``None``이어야 합니다.admin.E111:
list_display_links[n]값은 ``list_display``에 정의되지 않은 ``<label>``을 참조합니다.admin.E112:
list_filter값은 리스트 또는 튜플이어야 합니다.admin.E113: ``list_filter[n]``의 값은 ``ListFilter``에서 상속되어야 합니다.
admin.E114: ``list_filter[n]``의 값은 ``FieldListFilter``에서 상속되어야 합니다.
admin.E115: ``list_filter[n][1]``의 값은 ``FieldListFilter``에서 상속되어야 합니다.
admin.E116:
list_filter[n]의 값은 필드를 참조하지 않는 ``<label>``을 참조합니다.admin.E117: `list_select_related``의 값은 부울, 튜플 또는 리스트여야 합니다.
admin.E118: ``list_per_page``의 값은 정수여야 합니다.
admin.E119: ``list_max_show_all``의 값은 정수여야 합니다.
admin.E120: ``list_editable``의 값은 리스트 또는 튜플이어야 합니다.
admin.E121: ``list_editable[n]``의 값은 ``<model>``의 필드가 아닌 ``<label>``을 나타냅니다.
admin.E122: ``list_editable[n]``의 값은 ``list_display``에 포함되지 않은 ``<label>``을 참조합니다.
admin.E123:
list_editable[n]``의 값은 ``list_editable``과 ``list_display_links모두에 있을 수 없습니다.admin.E124:
list_editable[n]``의 값은 ``list_display(<label>)의 첫 번째 필드를 참조하며, ``list_display_links``를 설정하지 않으면 사용할 수 없습니다.admin.E125: ``list_editable[n]``의 값은 관리자를 통해 편집할 수 없는 ``<field name>``을 참조합니다.
admin.E126: ``search_fields``의 값은 리스트 또는 튜플이어야 합니다.
admin.E127: ``date_hierarchy``의 값은 필드를 참조하지 않는 ``<field name>``를 참조합니다.
admin.E128:
date_hierarchy``의 값은 ``DateField혹은 ``DateTimeField``여야한다.admin.E129: ``<modeladmin>``는 ``<action>``동작에 대한 ``has_<foo>_permission()``메서드를 정의해야합니다.
admin.E130: ``<modeladmin>``에 정의된 동작의 ``__name__``특성은 고유해야 합니다. 이름 ``<name>``는 고유하지 않습니다.
InlineModelAdminLink to this heading
다음 검사는 :class:`~django.contrib.admin.ModelAdmin`에 인라인으로 등록된 모든 :class:`~django.contrib.admin.InlineModelAdmin`에 대해 수행됩니다.
admin.E201: 필드 ``<field name>``은 상위 모델``<app_label>.<model>``의 외부 키이기 때문에 제외할 수 없습니다.
admin.E202:
<model>has noForeignKeyto<parent model>./<model>has more than oneForeignKeyto<parent model>. You must specify afk_nameattribute.admin.E203: ``extra``의 값은 정수여야 합니다.
admin.E204: ``max_num``의 값은 정수여야합니다.
admin.E205: ``min_num``의 값은 정수여야합니다.
admin.E206: ``formset``의 값은 ``BaseModelFormSet``에서 상속되어야 합니다.
GenericInlineModelAdminLink to this heading
다음 검사는 :class:`~django.contrib.admin.ModelAdmin`에 인라인으로 등록된 모든 :class:`~django.contrib.contenttypes.admin.GenericInlineModelAdmin`에 대해 수행됩니다.
admin.E301:
<model>has noGenericForeignKey.admin.E302:
'ct_field'references<label>, which is not a field on<model>.admin.E303:
'ct_fk_field'references<label>, which is not a field on<model>.admin.E304: ``<model>``에는 내용 유형 필드 ``<field name>``와 객체 ID 필드 ``<field name>``을 사용하는 ``GenericForeignKey``가 없습니다.
AdminSiteLink to this heading
디폴트 AdminSite:에 대해 다음 검사가 수행됩니다.
admin.E401: 관리 응용 프로그램을 사용하려면 :mod:`django.contrib.contenttypes`가 :setting:`INSTALLED_APPS`에 있어야 합니다.
admin.E402:
django.contrib.auth.context_processors.authmust be enabled inDjangoTemplates(TEMPLATES) if using the default auth backend in order to use the admin application.admin.E403: A
django.template.backends.django.DjangoTemplatesinstance must be configured inTEMPLATESin order to use the admin application.admin.E404:
django.contrib.messages.context_processors.messagesmust be enabled inDjangoTemplates(TEMPLATES) in order to use the admin application.admin.E405:
django.contrib.authmust be inINSTALLED_APPSin order to use the admin application.admin.E406:
django.contrib.messagesmust be inINSTALLED_APPSin order to use the admin application.admin.E408:
django.contrib.auth.middleware.AuthenticationMiddlewaremust be inMIDDLEWAREin order to use the admin application.admin.E409:
django.contrib.messages.middleware.MessageMiddlewaremust be inMIDDLEWAREin order to use the admin application.admin.E410:
django.contrib.sessions.middleware.SessionMiddlewaremust be inMIDDLEWAREin order to use the admin application.admin.W411:
django.template.context_processors.requestmust be enabled inDjangoTemplates(TEMPLATES) in order to use the admin navigation sidebar.
authLink to this heading
auth.E001: ``REQUIRED_FIELDS``는 리스트 혹은 튜플이어야 합니다.
auth.E002: 사용자 지정 모델에 대해 ``USERNAME_FIELD``로 명명된 필드는 ``REQUIRED_FIELDS``에 포함되어서는 안 됩니다.
auth.W004: ``<field>``은 ``USERNAME_FIELD``로 명명되지만 고유한 이름은 아닙니다.
auth.E005: The permission codenamed
<codename>clashes with a builtin permission for model<model>.auth.E006: The permission codenamed
<codename>is duplicated for model<model>.auth.E007: The
verbose_nameof model<model>must be at most 244 characters for its builtin permission names to be at most 255 characters.auth.E008: The permission named
<name>of model<model>is longer than 255 characters.auth.C009:
<User model>.is_anonymousmust be an attribute or property rather than a method. Ignoring this is a security issue as anonymous users will be treated as authenticated!auth.C010:
<User model>.is_authenticatedmust be an attribute or property rather than a method. Ignoring this is a security issue as anonymous users will be treated as authenticated!auth.E011: The name of model
<model>must be at most 93 characters for its builtin permission names to be at most 100 characters.auth.E012: The permission codenamed
<codename>of model<model>is longer than 100 characters.auth.E013: In order to use
django.contrib.auth.middleware.LoginRequiredMiddleware,django.contrib.auth.middleware.AuthenticationMiddlewaremust be defined before it in MIDDLEWARE.
contenttypesLink to this heading
모델에 GenericForeignKey 또는 GenericRelation:가 포함된 경우 다음 검사가 수행됩니다.
postgresLink to this heading
django.contrib.postgres model fields:에 대해 다음 검사가 수행됩니다.
postgres.E001: Base field for array has errors: …
postgres.E002: 배열의 기본 필드는 관련 필드일 수 없습니다.
postgres.E003:
<field>default should be a callable instead of an instance so that it’s not shared between all field instances. This check was changed tofields.E010in Django 3.1.postgres.W004: Base field for array has warnings: …
sitesLink to this heading
다음 점검은 CurrentSiteManager:를 사용하여 모든 모델에서 수행됩니다.
sites.E001: ``CurrentSiteManager``에서 ``<field name>``이라는 이름의 필드를 찾을 수 없습니다.
sites.E002: ``CurrentSiteManager``는 외부 키 또는 다대다 필드가 아니므로 ``<field>``을 사용할 수 없습니다.
다음 검사를 통해 :mod:`django.contrib.sites`가 확인됩니다.
sites.E101:
SITE_ID설정은 정수여야 합니다.
staticfilesLink to this heading
다음 검사를 통해 :mod:`django.contrib.staticfiles`가 올바르게 구성되어 있는지 확인합니다:
staticfiles.E001: :setting:`STATICFILES_DIRS`설정은 튜플 또는 목록이 아닙니다.
staticfiles.E002:
STATICFILES_DIRS설정에는 :setting:`STATIC_ROOT`설정이 포함되지 않아야 합니다.staticfiles.E003:
STATICFILES_DIRS설정의 접두사 ``<prefix>``은 슬래시로 끝날 수 없습니다.staticfiles.W004: :setting:`STATICFILES_DIRS`의 디렉토리 ``<directory>``은 존재하지 않습니다.
staticfiles.E005: The
STORAGESsetting must define astaticfilesstorage.