I created a simple contact form with Django for a client. I am using the
Messages framework to display an error or success message on form
submission. If the form encounters any errors once or twice, we're good. It
displays the error message. But, after the third of fourth time there's an
error, I eventually start getting an Internal Server Error (500).
Here's my *forms.py*
from django import forms
from captcha.fields import ReCaptchaField
class EmailForm(forms.Form):
captcha = ReCaptchaField()
contact_name = forms.CharField(label='Name',max_length=100,required=True
,widget=forms.TextInput(attrs={'required':'true'}))
contact_email = forms.EmailField(required=True,max_length=100,label=
'Email',widget=forms.EmailInput(attrs={'required':'true'}))
content = forms.CharField(required=True,widget=forms.Textarea(attrs={
'required':'true'}))
Here's my *views.py*
from django.shortcuts import render, redirect
from django.contrib import messages
from .models import Employee
from .forms import EmailForm
from django.core.mail import send_mail
from django.template import Context
from django.template.loader import get_template
# Create your views here.
def home(request):
return render(request, 'index.html')
def team(request):
members = Employee.objects.all()
return render(request, 'team.html', {'members':members})
def contact(request):
form_class = EmailForm
if request.method == 'POST':
form = EmailForm(request.POST)
if form.is_valid():
contact_name = request.POST.get('contact_name', '')
contact_email = request.POST.get('contact_email', '')
form_content = request.POST.get('content', '')
template = get_template('contact_template.txt')
context = Context({'contact_name':contact_name,'contact_email':
contact_email,'form_content':form_content,})
content = template.render(context)
send_mail('Website Email from ' + contact_name,content,
contact_email, ['[email protected]'], fail_silently=False)
messages.success(request,'Email was successful!')
else:
try:
messages.error = messages.error(request, 'There was an
error submitting your email. Try again.')
except TypeError:
messages.error = messages.error(request, 'There was an
error submitting your email. Try again.')
return render(request, 'contact.html', {'form': form_class, })
And then here's the* trace*:
Internal Server Error: /contact/
TypeError at /contact/ ‘NoneType’ object is not callable
Request Method: POST Request URL: https:
//www.crowdcontrolstudios.com/contact/
<https://u4177255.ct.sendgrid.net/wf/click?upn=cOiSct7ckumc45Jg8h4RU7ZPO2mSfJLsUNtQxfI64lEHd53IFXyy3nm4v13NIn5QfTRyR9umoXC0yf8nel8kIg-3D-3D_8oo56UkJVDAwKlxdIgjqcdEy8NDaT992rGsVWFXA0YWbNGxL3V8g8mUoDxo6-2BkMahxF3wcUJnctcZA91H1gFWDB4GVEdIWBpSVPPY-2FFyxmGsa-2B93ivgMATSio0sPomdwpRHETfSgRoWiOuxpTwYwW6lEtkgPDqrFlZMfGgcOXXfd3KS-2FqDsMN5hEJ1MrHsHNfWIxMfOkMAco0mdltgSa2A-3D-3D>
Django Version: 1.10.4 Python Executable:
/home/django/django/crowdcontrol_env/bin/python3 Python Version: 3.5.2
Python Path: ['/home/django/django',
‘/home/django/django/crowdcontrol_env/bin’,
‘/home/django/django/crowdcontrol_env/lib/python35.zip’,
‘/home/django/django/crowdcontrol_env/lib/python3.5’,
‘/home/django/django/crowdcontrol_env/lib/python3.5/plat-x86_64-linux-gnu’,
‘/home/django/django/crowdcontrol_env/lib/python3.5/lib-dynload’,
‘/usr/lib/python3.5’, ‘/usr/lib/python3.5/plat-x86_64-linux-gnu’,
‘/home/django/django/crowdcontrol_env/lib/python3.5/site-packages’] Server
time: Wed, 14 Dec 2016 23:43:43 +0000 Installed Applications:
['static_pages','widget_tweaks',
'captcha',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles']
Installed Middleware: ['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback:
File “/home/django/django/static_pages/views.py” in contact33. messages.error
= messages.error(request, 'There was an error submitting your email. Try
again.')
During handling of the above exception ('NoneType' object is not callable),
another exception occurred:
File “/home/django/django/crowdcontrol_env/lib/python3.5/site-packages/
django/core/handlers/exception.py” in inner39. response = get_response(
request)
File “/home/django/django/crowdcontrol_env/lib/python3.5/site-packages/
django/core/handlers/base.py” in _get_response187. response = self.
process_exception_by_middleware(e, request)
File “/home/django/django/crowdcontrol_env/lib/python3.5/site-packages/
django/core/handlers/base.py” in _get_response185. response =
wrapped_callback(request, *callback_args, **callback_kwargs)
File “/home/django/django/static_pages/views.py” in contact35. messages.error
= messages.error(request, 'There was an error submitting your email. Try
again.')
Exception Type: TypeError at /contact/ Exception Value: ‘NoneType’ object is
not callable Request information: USER: *****
GET: No GET data
POST: csrfmiddlewaretoken = ‘
DRULxDE8vxU42lHJLCrzcPjhCGRVs6IoB0PhVizCx1ASKKRMyA0d9Dc1EpRAsyqC’ Submit = ‘
Submit’ contact_email = '' g-recaptcha-response = '' contact_name = ''
content = ''
FILES: No FILES data
COOKIES: csrftoken = ‘
3cW1HK3AJfg52iN4QacRP0Pn8VmiPXwN1lRx5pY4LJWTKHX7D8LvMOI7aEmXPpe1’ sessionid
= ‘1u9isby2y67q37srddz5rpsfeopc5008’
META: CONTENT_LENGTH = ‘158’ CONTENT_TYPE = ‘application/x-www-form-
urlencoded’ CSRF_COOKIE = ‘
3cW1HK3AJfg52iN4QacRP0Pn8VmiPXwN1lRx5pY4LJWTKHX7D8LvMOI7aEmXPpe1’
HTTP_ACCEPT = ‘text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8’
HTTP_ACCEPT_ENCODING = ‘gzip, deflate’ HTTP_ACCEPT_LANGUAGE = ‘en-us’
HTTP_CONNECTION = ‘close’ HTTP_COOKIE =
‘csrftoken=3cW1HK3AJfg52iN4QacRP0Pn8VmiPXwN1lRx5pY4LJWTKHX7D8LvMOI7aEmXPpe1;
sessionid=1u9isby2y67q37srddz5rpsfeopc5008’ HTTP_HOST =
‘www.crowdcontrolstudios.com’ HTTP_ORIGIN = '
https://www.crowdcontrolstudios.com
<https://u4177255.ct.sendgrid.net/wf/click?upn=cOiSct7ckumc45Jg8h4RU7ZPO2mSfJLsUNtQxfI64lG07sHS-2BEEPo6bydZ7UjJFB_8oo56UkJVDAwKlxdIgjqcdEy8NDaT992rGsVWFXA0YWbNGxL3V8g8mUoDxo6-2BkMalEKqeIU-2B0tlyJt8nmqEzaFE-2BD4MQ0UwvmjxI1nWRb61c8AhcH4saMnXzzUT9cLVlPIvOHZH8dC5oU9nrMbX2f0tOPBGnBVd3UZDvPCUFWIJIP1Vy0CmwfUtzTB1X72jQCJzcLqaRyphn9qljTvDzvQ-3D-3D>'
HTTP_REFERER = 'https://www.crowdcontrolstudios.com/contact/
<https://u4177255.ct.sendgrid.net/wf/click?upn=cOiSct7ckumc45Jg8h4RU7ZPO2mSfJLsUNtQxfI64lEHd53IFXyy3nm4v13NIn5QfTRyR9umoXC0yf8nel8kIg-3D-3D_8oo56UkJVDAwKlxdIgjqcdEy8NDaT992rGsVWFXA0YWbNGxL3V8g8mUoDxo6-2BkMamEbDXxUTx0pQHqAjLW77jly7fDRKcdS5BRaTPZ9DutcO0o-2FyW5Vx8X3WFC-2BgHIAunz1auIFG0giZR0IMm1GBgy7CWmq0cJaukqMCtzYErk74PB-2Bqg-2F3UCzg6Y224v49lh47Nhxzj987a9gmKCCLdyg-3D-3D>'
HTTP_USER_AGENT = ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1)
AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14’
HTTP_X_FORWARDED_FOR = ‘50.188.167.135’ HTTP_X_FORWARDED_PROTO =
‘https,https’ HTTP_X_REAL_IP = ‘50.188.167.135’ PATH_INFO = ‘/contact/’
QUERY_STRING = '' RAW_URI = ‘/contact/’ REMOTE_ADDR = “b''” REQUEST_METHOD
= ‘POST’ SCRIPT_NAME = '' SERVER_NAME = ‘www.crowdcontrolstudios.com’
SERVER_PORT = ‘443’ SERVER_PROTOCOL = ‘HTTP/1.0’ SERVER_SOFTWARE =
‘gunicorn/19.6.0’ gunicorn.socket = <socket.socket fd=11,
family=AddressFamily.AF_UNIX, type=SocketKind.SOCK_STREAM, proto=0,
laddr=/home/django/django/crowdcontrol.sock> wsgi.errors =
<gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7f332b451940>
wsgi.file_wrapper = '' wsgi.input = <gunicorn.http.body.Body object at
0x7f332b451cf8> wsgi.multiprocess = True wsgi.multithread = False
wsgi.run_once = False wsgi.url_scheme = ‘https’ wsgi.version =
Settings: Using settings module crowdcontrol.settings
ABSOLUTE_URL_OVERRIDES = {} ADMINS = [('Zach', ‘[email protected]')]
ALLOWED_HOSTS = ['104.236.217.168’, ‘www.crowdcontrolstudios.com’,
‘crowdcontrolstudios.com’] APPEND_SLASH = True AUTHENTICATION_BACKENDS =
['django.contrib.auth.backends.ModelBackend'] AUTH_PASSWORD_VALIDATORS =
‘********************’ AUTH_USER_MODEL = ‘auth.User’ BASE_DIR =
‘/home/django/django’ CACHES = {'default': {'BACKEND':
‘django.core.cache.backends.locmem.LocMemCache'}} CACHE_MIDDLEWARE_ALIAS =
‘default’ CACHE_MIDDLEWARE_KEY_PREFIX = ‘********************’
CACHE_MIDDLEWARE_SECONDS = 600 CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None CSRF_COOKIE_HTTPONLY = False CSRF_COOKIE_NAME =
‘csrftoken’ CSRF_COOKIE_PATH = ‘/’ CSRF_COOKIE_SECURE = True
CSRF_FAILURE_VIEW = ‘django.views.csrf.csrf_failure’ CSRF_HEADER_NAME =
‘HTTP_X_CSRFTOKEN’ CSRF_TRUSTED_ORIGINS = [] DATABASES = {'default’:
{'USER': ‘django’, ‘NAME’: ‘django’, ‘TEST’: {'COLLATION': None, ‘NAME’:
None, ‘CHARSET’: None, ‘MIRROR’: None}, ‘ENGINE’:
‘django.db.backends.postgresql_psycopg2’, ‘CONN_MAX_AGE’: 0, ‘OPTIONS’: {},
‘PORT’: '', ‘TIME_ZONE’: None, ‘ATOMIC_REQUESTS’: False, ‘AUTOCOMMIT’:
True, ‘PASSWORD’: ‘********************’, ‘HOST’: ‘localhost'}}
DATABASE_ROUTERS = [] DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
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’, ‘%Y-%m-%d’, ‘%m/%d/%Y %H:%M:%S’, ‘%m/%d/%Y %H:%M:%S.%f’,
‘%m/%d/%Y %H:%M’, ‘%m/%d/%Y’, ‘%m/%d/%y %H:%M:%S’, ‘%m/%d/%y %H:%M:%S.%f’,
‘%m/%d/%y %H:%M’, ‘%m/%d/%y’] 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 =
False DEBUG_PROPAGATE_EXCEPTIONS = False DECIMAL_SEPARATOR = ‘.’
DEFAULT_CHARSET = ‘utf-8’ DEFAULT_CONTENT_TYPE = ‘text/html’
DEFAULT_EXCEPTION_REPORTER_FILTER =
‘django.views.debug.SafeExceptionReporterFilter’ DEFAULT_FILE_STORAGE =
‘django.core.files.storage.FileSystemStorage’ DEFAULT_FROM_EMAIL =
‘webmaster@localhost’ DEFAULT_INDEX_TABLESPACE = '' DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = [] EMAIL_BACKEND =
‘django.core.mail.backends.smtp.EmailBackend’ EMAIL_HOST =
‘smtp.sendgrid.net’ EMAIL_HOST_PASSWORD = ‘********************’
EMAIL_HOST_USER = ‘crowdcontrol_ada’ EMAIL_PORT = 587 EMAIL_SSL_CERTFILE =
None EMAIL_SSL_KEYFILE = ‘********************’ EMAIL_SUBJECT_PREFIX =
‘[Django] ' EMAIL_TIMEOUT = None EMAIL_USE_SSL = False EMAIL_USE_TLS = True
FILE_CHARSET = ‘utf-8’ 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 = None
FILE_UPLOAD_TEMP_DIR = None FIRST_DAY_OF_WEEK = 0 FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None FORMAT_MODULE_PATH = None IGNORABLE_404_URLS = []
INSTALLED_APPS = ['static_pages', ‘widget_tweaks’, ‘captcha’,
‘django.contrib.admin’, ‘django.contrib.auth’,
‘django.contrib.contenttypes’, ‘django.contrib.sessions’,
‘django.contrib.messages’, ‘django.contrib.staticfiles’] INTERNAL_IPS = []
LANGUAGES = [('af', ‘Afrikaans'), ('ar’, ‘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'), ('ia’, ‘Interlingua'), ('id’, ‘Indonesian'), ('io’,
‘Ido'), ('is’, ‘Icelandic'), ('it’, ‘Italian'), ('ja’, ‘Japanese'), ('ka’,
‘Georgian'), ('kk’, ‘Kazakh'), ('km’, ‘Khmer'), ('kn’, ‘Kannada'), ('ko’,
‘Korean'), ('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'), ('th’, ‘Thai'), ('tr’, ‘Turkish'), ('tt’,
‘Tatar'), ('udm’, ‘Udmurt'), ('uk’, ‘Ukrainian'), ('ur’, ‘Urdu'), ('vi’,
‘Vietnamese'), ('zh-hans’, ‘Simplified Chinese'), ('zh-hant’, ‘Traditional
Chinese')] LANGUAGES_BIDI = ['he’, ‘ar’, ‘fa’, ‘ur’] LANGUAGE_CODE =
‘en-us’ LANGUAGE_COOKIE_AGE = None LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_NAME = ‘django_language’ LANGUAGE_COOKIE_PATH = ‘/’
LOCALE_PATHS = [] LOGGING = {} 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’ MESSAGE_TAGS =
{40: ‘danger’} MIDDLEWARE =
['django.middleware.security.SecurityMiddleware',
‘django.contrib.sessions.middleware.SessionMiddleware’,
‘django.middleware.common.CommonMiddleware’,
‘django.middleware.csrf.CsrfViewMiddleware’,
‘django.contrib.auth.middleware.AuthenticationMiddleware’,
‘django.contrib.messages.middleware.MessageMiddleware’,
‘django.middleware.clickjacking.XFrameOptionsMiddleware’]
MIDDLEWARE_CLASSES = ['django.middleware.common.CommonMiddleware',
‘django.middleware.csrf.CsrfViewMiddleware’] MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = ‘F j’ NOCAPTCHA = True NUMBER_GROUPING = 0
PASSWORD_HASHERS = ‘********************’ PASSWORD_RESET_TIMEOUT_DAYS =
‘********************’ PREPEND_WWW = False RECAPTCHA_PRIVATE_KEY =
‘********************’ RECAPTCHA_PUBLIC_KEY = ‘********************’
ROOT_URLCONF = ‘crowdcontrol.urls’ SECRET_KEY = ‘********************’
SECURE_BROWSER_XSS_FILTER = False SECURE_CONTENT_TYPE_NOSNIFF = False
SECURE_HSTS_INCLUDE_SUBDOMAINS = False SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = SECURE_REDIRECT_EXEMPT = [] SECURE_SSL_HOST =
None SECURE_SSL_REDIRECT = True 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_SECURE = True 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 = ‘crowdcontrol.settings’ SHORT_DATETIME_FORMAT = ‘m/d/Y P’
SHORT_DATE_FORMAT = ‘m/d/Y’ SIGNING_BACKEND =
‘django.core.signing.TimestampSigner’ SILENCED_SYSTEM_CHECKS = []
STATICFILES_DIR = ‘/_static/’ STATICFILES_DIRS = [] STATICFILES_FINDERS =
['django.contrib.staticfiles.finders.FileSystemFinder',
‘django.contrib.staticfiles.finders.AppDirectoriesFinder’]
STATICFILES_STORAGE =
‘django.contrib.staticfiles.storage.StaticFilesStorage’ STATIC_ROOT =
‘/home/django/django/_static/’ STATIC_URL = ‘/_static/’ TEMPLATES =
[{'DIRS': ['_templates'], ‘APP_DIRS’: True, ‘BACKEND’:
‘django.template.backends.django.DjangoTemplates’, ‘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_ETAGS = False 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 =
‘crowdcontrol.wsgi.application’ X_FRAME_OPTIONS = ‘SAMEORIGIN’
YEAR_MONTH_FORMAT = ‘F Y’
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/bf997250-aca2-4063-9a37-7129b094cef5%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.