401 Client Error: Unauthorized for url: https://api.airtable.com/v0/appeO848S1Ia1icdL/VEHICLES [Error: {'type': 'API_KEYS_ARE_DEPRECATED', 'message': "Airtable API keys are deprecated and can no longer be used. To continue using Airtable's API, migrate to personal access tokens or OAuth for integrations: https://support.airtable.com/docs/airtable-api-key-deprecation-notice."}]
Request Method: | GET |
---|---|
Request URL: | https://blindzonecalculator.herokuapp.com/getinfo/699 |
Django Version: | 3.2.8 |
Exception Type: | HTTPError |
Exception Value: | 401 Client Error: Unauthorized for url: https://api.airtable.com/v0/appeO848S1Ia1icdL/VEHICLES [Error: {'type': 'API_KEYS_ARE_DEPRECATED', 'message': "Airtable API keys are deprecated and can no longer be used. To continue using Airtable's API, migrate to personal access tokens or OAuth for integrations: https://support.airtable.com/docs/airtable-api-key-deprecation-notice."}] |
Exception Location: | /app/blindspotapp/Airtable.py, line 87, in _process_response |
Python Executable: | /app/.heroku/python/bin/python3 |
Python Version: | 3.9.19 |
Python Path: | ['/app/.heroku/python/bin', '/app', '/app/.heroku/python/lib/python39.zip', '/app/.heroku/python/lib/python3.9', '/app/.heroku/python/lib/python3.9/lib-dynload', '/app/.heroku/python/lib/python3.9/site-packages'] |
Server time: | Fri, 29 Mar 2024 09:24:42 +0000 |
/app/blindspotapp/Airtable.py
, line 68, in _process_response
param_value = params[param_name]
ParamClass = AirtableParams._get(param_name)
new_params.update(ParamClass(param_value).to_param_dict())
return new_params
def _process_response(self, response):
try:
response.raise_for_status()…
except requests.exceptions.HTTPError as exc:
err_msg = str(exc)
# Reports Decoded 422 Url for better troubleshooting
# Disabled in IronPython Bug:
# https://github.com/IronLanguages/ironpython2/issues/242
Variable | Value |
---|---|
err_msg | ('401 Client Error: Unauthorized for url: ' "https://api.airtable.com/v0/appeO848S1Ia1icdL/VEHICLES [Error: {'type': " '\'API_KEYS_ARE_DEPRECATED\', \'message\': "Airtable API keys are deprecated ' "and can no longer be used. To continue using Airtable's API, migrate to " 'personal access tokens or OAuth for integrations: ' 'https://support.airtable.com/docs/airtable-api-key-deprecation-notice."}]') |
error_dict | {'error': {'message': 'Airtable API keys are deprecated and can no longer be ' "used. To continue using Airtable's API, migrate to " 'personal access tokens or OAuth for integrations: ' 'https://support.airtable.com/docs/airtable-api-key-deprecation-notice.', 'type': 'API_KEYS_ARE_DEPRECATED'}} |
response | <Response [401]> |
self | <Airtable table:VEHICLES> |
/app/.heroku/python/lib/python3.9/site-packages/requests/models.py
, line 1021, in raise_for_status
elif 500 <= self.status_code < 600:
http_error_msg = (
f"{self.status_code} Server Error: {reason} for url: {self.url}"
)
if http_error_msg:
raise HTTPError(http_error_msg, response=self)…
def close(self):
"""Releases the connection back to the pool. Once this method has been
called the underlying ``raw`` object must not be accessed again.
*Note: Should not normally need to be called explicitly.*
Variable | Value |
---|---|
http_error_msg | ('401 Client Error: Unauthorized for url: ' 'https://api.airtable.com/v0/appeO848S1Ia1icdL/VEHICLES') |
reason | 'Unauthorized' |
self | <Response [401]> |
/app/.heroku/python/lib/python3.9/site-packages/django/core/handlers/exception.py
, line 47, in inner
response = await sync_to_async(response_for_exception, thread_sensitive=False)(request, exc)
return response
return inner
else:
@wraps(get_response)
def inner(request):
try:
response = get_response(request)…
except Exception as exc:
response = response_for_exception(request, exc)
return response
return inner
Variable | Value |
---|---|
exc | HTTPError('401 Client Error: Unauthorized for url: https://api.airtable.com/v0/appeO848S1Ia1icdL/VEHICLES [Error: {\'type\': \'API_KEYS_ARE_DEPRECATED\', \'message\': "Airtable API keys are deprecated and can no longer be used. To continue using Airtable\'s API, migrate to personal access tokens or OAuth for integrations: https://support.airtable.com/docs/airtable-api-key-deprecation-notice."}]') |
get_response | <bound method BaseHandler._get_response of <django.core.handlers.wsgi.WSGIHandler object at 0x7f1a660d6a90>> |
request | <WSGIRequest: GET '/getinfo/699'> |
/app/.heroku/python/lib/python3.9/site-packages/django/core/handlers/base.py
, line 181, in _get_response
if response is None:
wrapped_callback = self.make_view_atomic(callback)
# If it is an asynchronous view, run it in a subthread.
if asyncio.iscoroutinefunction(wrapped_callback):
wrapped_callback = async_to_sync(wrapped_callback)
try:
response = wrapped_callback(request, *callback_args, **callback_kwargs)…
except Exception as e:
response = self.process_exception_by_middleware(e, request)
if response is None:
raise
# Complain if the view returned None (a common error).
Variable | Value |
---|---|
callback | <function getinfo at 0x7f1a4d043670> |
callback_args | () |
callback_kwargs | {'user_data': 699} |
request | <WSGIRequest: GET '/getinfo/699'> |
response | None |
self | <django.core.handlers.wsgi.WSGIHandler object at 0x7f1a660d6a90> |
wrapped_callback | <function getinfo at 0x7f1a4d043670> |
/app/blindspotapp/views.py
, line 180, in getinfo
top_img = vehicle['fields']['Overhead Image String']
top_img = compress_image_url(top_img)
#print (top_img)
return( panor_img, front_img, side_img, top_img )
# generates two sentences at the top of the getinfo page describing the vehicle, and generates the vehicle images
def getinfo(request, user_data=None):
plot_div, percen, front_percen, side_percen, percentile, make, model, year = makehistogram(user_data)…
"""
img = Image.new('RGB', (10, 10), (255, 0, 0) )
buffered = BytesIO()
img.save(buffered, format="PNG")
img_str = base64.b64encode(buffered.getvalue()).decode()
Variable | Value |
---|---|
request | <WSGIRequest: GET '/getinfo/699'> |
user_data | 699 |
/app/blindspotapp/views.py
, line 67, in makehistogram
at = Airtable('appeO848S1Ia1icdL', 'VEHICLES', 'keyk5gsH5fD2iJrrR')
percentile = 0
make ="NA"
model = "NA"
year =1950
vehicles = at.get_all()…
perc_vis = [vehicle['fields']['Percent Visible Volume']
for vehicle in vehicles]
# make the figure
fig = go.Figure()
histogram = go.Histogram(x=perc_vis,
Variable | Value |
---|---|
at | <Airtable table:VEHICLES> |
make | 'NA' |
model | 'NA' |
percentile | 0 |
user_data | 699 |
year | 1950 |
/app/blindspotapp/Airtable.py
, line 203, in get_all
Returns:
records (``list``): List of Records
>>> records = get_all(maxRecords=3, view='All')
"""
all_records = []
for records in self.get_iter(**options):…
all_records.extend(records)
return all_records
def match(self, field_name, field_value, **options):
"""
Returns first match found in :any:`get_all`
Variable | Value |
---|---|
all_records | [] |
options | {} |
self | <Airtable table:VEHICLES> |
/app/blindspotapp/Airtable.py
, line 166, in get_iter
Returns:
iterator (``list``): List of Records, grouped by pageSize
"""
offset = None
while True:
data = self._get(self.url_table, offset=offset, **options)…
records = data.get("records", [])
time.sleep(self.API_LIMIT)
yield records
offset = data.get("offset")
if not offset:
break
Variable | Value |
---|---|
offset | None |
options | {} |
self | <Airtable table:VEHICLES> |
/app/blindspotapp/Airtable.py
, line 103, in _get
response = self.session.request(
method, url, params=params, json=json_data, timeout=self.timeout
)
return self._process_response(response)
def _get(self, url, **params):
processed_params = self._process_params(params)
return self._request("get", url, params=processed_params)…
def _post(self, url, json_data):
return self._request("post", url, json_data=json_data)
def _put(self, url, json_data):
return self._request("put", url, json_data=json_data)
Variable | Value |
---|---|
params | {'offset': None} |
processed_params | OrderedDict([('offset', None)]) |
self | <Airtable table:VEHICLES> |
url | 'https://api.airtable.com/v0/appeO848S1Ia1icdL/VEHICLES' |
/app/blindspotapp/Airtable.py
, line 99, in _request
""" Builds URL with record id """
return posixpath.join(self.url_table, record_id)
def _request(self, method, url, params=None, json_data=None):
response = self.session.request(
method, url, params=params, json=json_data, timeout=self.timeout
)
return self._process_response(response)…
def _get(self, url, **params):
processed_params = self._process_params(params)
return self._request("get", url, params=processed_params)
def _post(self, url, json_data):
Variable | Value |
---|---|
json_data | None |
method | 'get' |
params | OrderedDict([('offset', None)]) |
response | <Response [401]> |
self | <Airtable table:VEHICLES> |
url | 'https://api.airtable.com/v0/appeO848S1Ia1icdL/VEHICLES' |
/app/blindspotapp/Airtable.py
, line 87, in _process_response
try:
error_dict = response.json()
except ValueError:
pass
else:
if "error" in error_dict:
err_msg += " [Error: {}]".format(error_dict["error"])
raise requests.exceptions.HTTPError(err_msg)…
else:
return response.json()
def record_url(self, record_id):
""" Builds URL with record id """
return posixpath.join(self.url_table, record_id)
Variable | Value |
---|---|
err_msg | ('401 Client Error: Unauthorized for url: ' "https://api.airtable.com/v0/appeO848S1Ia1icdL/VEHICLES [Error: {'type': " '\'API_KEYS_ARE_DEPRECATED\', \'message\': "Airtable API keys are deprecated ' "and can no longer be used. To continue using Airtable's API, migrate to " 'personal access tokens or OAuth for integrations: ' 'https://support.airtable.com/docs/airtable-api-key-deprecation-notice."}]') |
error_dict | {'error': {'message': 'Airtable API keys are deprecated and can no longer be ' "used. To continue using Airtable's API, migrate to " 'personal access tokens or OAuth for integrations: ' 'https://support.airtable.com/docs/airtable-api-key-deprecation-notice.', 'type': 'API_KEYS_ARE_DEPRECATED'}} |
response | <Response [401]> |
self | <Airtable table:VEHICLES> |
AnonymousUser
No GET data
No POST data
No FILES data
No cookie data
Variable | Value |
---|---|
HTTP_ACCEPT | '*/*' |
HTTP_CONNECTION | 'close' |
HTTP_CONNECT_TIME | '0' |
HTTP_HOST | 'blindzonecalculator.herokuapp.com' |
HTTP_TOTAL_ROUTE_TIME | '0' |
HTTP_USER_AGENT | 'claudebot' |
HTTP_VIA | '1.1 vegur' |
HTTP_X_FORWARDED_FOR | '44.201.99.133' |
HTTP_X_FORWARDED_PORT | '443' |
HTTP_X_FORWARDED_PROTO | 'https' |
HTTP_X_REQUEST_ID | 'cf891a7b-1ffd-4e7a-9bf5-55669d1b4b5b' |
HTTP_X_REQUEST_START | '1711704282515' |
PATH_INFO | '/getinfo/699' |
QUERY_STRING | '' |
RAW_URI | '/getinfo/699' |
REMOTE_ADDR | '10.1.11.169' |
REMOTE_PORT | '21923' |
REQUEST_METHOD | 'GET' |
SCRIPT_NAME | '' |
SERVER_NAME | '0.0.0.0' |
SERVER_PORT | '5465' |
SERVER_PROTOCOL | 'HTTP/1.1' |
SERVER_SOFTWARE | 'gunicorn/20.1.0' |
gunicorn.socket | <socket.socket fd=10, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('172.17.187.30', 5465), raddr=('10.1.11.169', 21923)> |
wsgi.errors | <gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7f1a4cfcc310> |
wsgi.file_wrapper | <class 'gunicorn.http.wsgi.FileWrapper'> |
wsgi.input | <gunicorn.http.body.Body object at 0x7f1a4cfccf10> |
wsgi.input_terminated | True |
wsgi.multiprocess | True |
wsgi.multithread | False |
wsgi.run_once | False |
wsgi.url_scheme | 'https' |
wsgi.version | (1, 0) |
main.settings
Setting | Value |
---|---|
ABSOLUTE_URL_OVERRIDES | {} |
ADMINS | [] |
ALLOWED_HOSTS | ['*'] |
APPEND_SLASH | True |
AUTHENTICATION_BACKENDS | ['django.contrib.auth.backends.ModelBackend'] |
AUTH_PASSWORD_VALIDATORS | '********************' |
AUTH_USER_MODEL | 'auth.User' |
BASE_DIR | '/app' |
CACHES | {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}} |
CACHE_MIDDLEWARE_ALIAS | 'default' |
CACHE_MIDDLEWARE_KEY_PREFIX | '********************' |
CACHE_MIDDLEWARE_SECONDS | 600 |
CORS_ORIGIN_ALLOW_ALL | True |
CORS_ORIGIN_WHITELIST | ('localhost:5000',) |
CSRF_COOKIE_AGE | 31449600 |
CSRF_COOKIE_DOMAIN | None |
CSRF_COOKIE_HTTPONLY | False |
CSRF_COOKIE_NAME | 'csrftoken' |
CSRF_COOKIE_PATH | '/' |
CSRF_COOKIE_SAMESITE | 'Lax' |
CSRF_COOKIE_SECURE | False |
CSRF_FAILURE_VIEW | 'django.views.csrf.csrf_failure' |
CSRF_HEADER_NAME | 'HTTP_X_CSRFTOKEN' |
CSRF_TRUSTED_ORIGINS | [] |
CSRF_USE_SESSIONS | False |
DATABASES | {'default': {'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'ENGINE': 'django.db.backends.sqlite3', 'HOST': '', 'NAME': '/app/db.sqlite3', 'OPTIONS': {}, 'PASSWORD': '********************', 'PORT': '', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}, 'TIME_ZONE': None, 'USER': ''}} |
DATABASE_ROUTERS | [] |
DATA_UPLOAD_MAX_MEMORY_SIZE | 5242880 |
DATA_UPLOAD_MAX_NUMBER_FIELDS | 1000 |
DATETIME_FORMAT | 'N j, Y, P' |
DATETIME_INPUT_FORMATS | ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M'] |
DATE_FORMAT | 'N j, Y' |
DATE_INPUT_FORMATS | ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y'] |
DEBUG | True |
DEBUG_PROPAGATE_EXCEPTIONS | False |
DECIMAL_SEPARATOR | '.' |
DEFAULT_AUTO_FIELD | 'django.db.models.AutoField' |
DEFAULT_CHARSET | 'utf-8' |
DEFAULT_EXCEPTION_REPORTER | 'django.views.debug.ExceptionReporter' |
DEFAULT_EXCEPTION_REPORTER_FILTER | 'django.views.debug.SafeExceptionReporterFilter' |
DEFAULT_FILE_STORAGE | 'django.core.files.storage.FileSystemStorage' |
DEFAULT_FROM_EMAIL | 'webmaster@localhost' |
DEFAULT_HASHING_ALGORITHM | 'sha256' |
DEFAULT_INDEX_TABLESPACE | '' |
DEFAULT_TABLESPACE | '' |
DISALLOWED_USER_AGENTS | [] |
EMAIL_BACKEND | 'django.core.mail.backends.smtp.EmailBackend' |
EMAIL_HOST | 'localhost' |
EMAIL_HOST_PASSWORD | '********************' |
EMAIL_HOST_USER | '' |
EMAIL_PORT | 25 |
EMAIL_SSL_CERTFILE | None |
EMAIL_SSL_KEYFILE | '********************' |
EMAIL_SUBJECT_PREFIX | '[Django] ' |
EMAIL_TIMEOUT | None |
EMAIL_USE_LOCALTIME | False |
EMAIL_USE_SSL | False |
EMAIL_USE_TLS | False |
FILE_UPLOAD_DIRECTORY_PERMISSIONS | None |
FILE_UPLOAD_HANDLERS | ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler'] |
FILE_UPLOAD_MAX_MEMORY_SIZE | 2621440 |
FILE_UPLOAD_PERMISSIONS | 420 |
FILE_UPLOAD_TEMP_DIR | None |
FIRST_DAY_OF_WEEK | 0 |
FIXTURE_DIRS | [] |
FORCE_SCRIPT_NAME | None |
FORMAT_MODULE_PATH | None |
FORM_RENDERER | 'django.forms.renderers.DjangoTemplates' |
IGNORABLE_404_URLS | [] |
INSTALLED_APPS | ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blindspotapp'] |
INTERNAL_IPS | [] |
LANGUAGES | [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz', 'Algerian Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'), ('th', 'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')] |
LANGUAGES_BIDI | ['he', 'ar', 'ar-dz', 'fa', 'ur'] |
LANGUAGE_CODE | 'en-us' |
LANGUAGE_COOKIE_AGE | None |
LANGUAGE_COOKIE_DOMAIN | None |
LANGUAGE_COOKIE_HTTPONLY | False |
LANGUAGE_COOKIE_NAME | 'django_language' |
LANGUAGE_COOKIE_PATH | '/' |
LANGUAGE_COOKIE_SAMESITE | None |
LANGUAGE_COOKIE_SECURE | False |
LOCALE_PATHS | [] |
LOGGING | {'disable_existing_loggers': False, 'formatters': {'simple': {'format': '%(levelname)s %(message)s'}, 'verbose': {'datefmt': '%Y-%m-%d %H:%M:%S', 'format': '%(asctime)s [%(process)d] ' '[%(levelname)s] pathname=%(pathname)s ' 'lineno=%(lineno)s funcname=%(funcName)s ' '%(message)s'}}, 'handlers': {'console': {'class': 'logging.StreamHandler', 'formatter': 'verbose', 'level': 'DEBUG'}, 'null': {'class': 'logging.NullHandler', 'level': 'DEBUG'}}, 'loggers': {'testlogger': {'handlers': ['console'], 'level': 'INFO'}}, 'version': 1} |
LOGGING_CONFIG | 'logging.config.dictConfig' |
LOGIN_REDIRECT_URL | '/accounts/profile/' |
LOGIN_URL | '/accounts/login/' |
LOGOUT_REDIRECT_URL | None |
MANAGERS | [] |
MEDIA_ROOT | '' |
MEDIA_URL | '/' |
MESSAGE_STORAGE | 'django.contrib.messages.storage.fallback.FallbackStorage' |
MIDDLEWARE | ('whitenoise.middleware.WhiteNoiseMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware') |
MIGRATION_MODULES | {} |
MONTH_DAY_FORMAT | 'F j' |
NUMBER_GROUPING | 0 |
PASSWORD_HASHERS | '********************' |
PASSWORD_RESET_TIMEOUT | '********************' |
PASSWORD_RESET_TIMEOUT_DAYS | '********************' |
PREPEND_WWW | False |
ROOT_URLCONF | 'main.urls' |
SECRET_KEY | '********************' |
SECURE_BROWSER_XSS_FILTER | False |
SECURE_CONTENT_TYPE_NOSNIFF | True |
SECURE_HSTS_INCLUDE_SUBDOMAINS | False |
SECURE_HSTS_PRELOAD | False |
SECURE_HSTS_SECONDS | 0 |
SECURE_PROXY_SSL_HEADER | None |
SECURE_REDIRECT_EXEMPT | [] |
SECURE_REFERRER_POLICY | 'same-origin' |
SECURE_SSL_HOST | None |
SECURE_SSL_REDIRECT | False |
SERVER_EMAIL | 'root@localhost' |
SESSION_CACHE_ALIAS | 'default' |
SESSION_COOKIE_AGE | 1209600 |
SESSION_COOKIE_DOMAIN | None |
SESSION_COOKIE_HTTPONLY | True |
SESSION_COOKIE_NAME | 'sessionid' |
SESSION_COOKIE_PATH | '/' |
SESSION_COOKIE_SAMESITE | 'Lax' |
SESSION_COOKIE_SECURE | False |
SESSION_ENGINE | 'django.contrib.sessions.backends.db' |
SESSION_EXPIRE_AT_BROWSER_CLOSE | False |
SESSION_FILE_PATH | None |
SESSION_SAVE_EVERY_REQUEST | False |
SESSION_SERIALIZER | 'django.contrib.sessions.serializers.JSONSerializer' |
SETTINGS_MODULE | 'main.settings' |
SHORT_DATETIME_FORMAT | 'm/d/Y P' |
SHORT_DATE_FORMAT | 'm/d/Y' |
SIGNING_BACKEND | 'django.core.signing.TimestampSigner' |
SILENCED_SYSTEM_CHECKS | [] |
STATICFILES_DIRS | [] |
STATICFILES_FINDERS | ['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder'] |
STATICFILES_STORAGE | 'whitenoise.storage.CompressedManifestStaticFilesStorage' |
STATIC_ROOT | '/app/staticfiles' |
STATIC_URL | '/static/' |
TEMPLATES | [{'APP_DIRS': True, 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages']}}] |
TEST_NON_SERIALIZED_APPS | [] |
TEST_RUNNER | 'django.test.runner.DiscoverRunner' |
THOUSAND_SEPARATOR | ',' |
TIME_FORMAT | 'P' |
TIME_INPUT_FORMATS | ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'] |
TIME_ZONE | 'UTC' |
USE_I18N | True |
USE_L10N | True |
USE_THOUSAND_SEPARATOR | False |
USE_TZ | True |
USE_X_FORWARDED_HOST | False |
USE_X_FORWARDED_PORT | False |
WSGI_APPLICATION | 'main.wsgi.application' |
X_FRAME_OPTIONS | 'DENY' |
YEAR_MONTH_FORMAT | 'F Y' |
You’re seeing this error because you have DEBUG = True
in your
Django settings file. Change that to False
, and Django will
display a standard page generated by the handler for this status code.