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, ['crowdcont...@sneakycr0w.com'], 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', ‘z...@sneakycr0w.com')] 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 django-users+unsubscr...@googlegroups.com. To post to this group, send email to django-users@googlegroups.com. 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.