=== modified file 'src/webui/tests/test_views_registration.py'
--- src/webui/tests/test_views_registration.py	2018-10-25 17:56:27 +0000
+++ src/webui/tests/test_views_registration.py	2018-12-20 18:24:52 +0000
@@ -38,6 +38,7 @@
 )
 from webui.views.registration import (
     ACCOUNT_CREATED,
+    ERROR_TOO_MANY_REQUESTS,
     VERIFY_EMAIL_SENT,
     WEB_CREATION_SOURCE,
     new_account,
@@ -332,6 +333,13 @@
         self.assert_form_displayed(response, email=VERIFY_EMAIL_MESSAGE)
         self.assert_stat_calls(['error.email'])
 
+    def test_post_too_many_requests(self):
+        exc = api_errors.TooManyRequests(Mock())
+        self.mock_api_register.side_effect = exc
+        response = self.post(**self.TESTDATA)
+        self.assertContains(response, ERROR_TOO_MANY_REQUESTS)
+        self.assert_stat_calls(['error.too_many_requests'])
+
 
 class RegisterTimelineTestCase(
         SSOBaseTestCase, RegisterTestMixin, TimelineActionMixin):
@@ -565,6 +573,14 @@
         self.assertEqual(response.status_code, 200)
         self.assert_stat_calls(['error.too_many_tokens'])
 
+    def test_post_too_many_requests(self):
+        exc = api_errors.TooManyRequests(Mock())
+        self.mock_api_request_password_reset.side_effect = exc
+        response = self.post(data=self.data)
+        self.assertEqual(response.status_code, 200)
+        self.assert_form_displayed(response, __all__=ERROR_TOO_MANY_REQUESTS)
+        self.assert_stat_calls(['error.too_many_requests'])
+
     def test_reset_password(self):
         response = self.post(data=self.data)
 

=== modified file 'src/webui/views/registration.py'
--- src/webui/views/registration.py	2018-10-16 19:32:57 +0000
+++ src/webui/views/registration.py	2018-12-20 18:24:52 +0000
@@ -74,9 +74,10 @@
     'to reset the corresponding account\'s password.')
 ERROR_PASSWORD_RESET_GENERIC = _(
     'It is not possible to reset this account\'s password.')
-ERROR_PASSWORD_RESET_TOO_MANY_TOKENS = (
+ERROR_PASSWORD_RESET_TOO_MANY_TOKENS = _(
     'Too many active password reset requests. An email has already been sent '
     'to your account; please verify your inbox.')
+ERROR_TOO_MANY_REQUESTS = _('Too many requests. Please try again later.')
 
 WEB_CREATION_SOURCE = 'web-flow'
 
@@ -124,6 +125,10 @@
                 collect_stats('error.email')
                 form._errors['email'] = [VERIFY_EMAIL_MESSAGE]
 
+            except api_errors.TooManyRequests as e:
+                collect_stats('error.too_many_requests')
+                messages.error(request, ERROR_TOO_MANY_REQUESTS)
+
             except Exception as e:
                 return HttpResponseServerError("exception: " + str(e))
             else:
@@ -227,6 +232,10 @@
                     ERROR_PASSWORD_RESET_TOO_MANY_TOKENS]
                 collect_stats('error.too_many_tokens')
 
+            except api_errors.TooManyRequests as e:
+                form.errors['__all__'] = [ERROR_TOO_MANY_REQUESTS]
+                collect_stats('error.too_many_requests')
+
             else:
                 msgs = {
                     'email_to': email,

