diff --git a/djblets/extensions/tests.py b/djblets/extensions/tests.py
index 4909428280e6c4f47760910329d14cfcbb3fd0a8..1d7a99dba5f17ed4ed203184886a226578fae334 100644
--- a/djblets/extensions/tests.py
+++ b/djblets/extensions/tests.py
@@ -30,6 +30,7 @@ import os
 import threading
 import time
 
+from django import forms
 from django.conf import settings
 from django.conf.urls import include, patterns
 from django.core.exceptions import ImproperlyConfigured
@@ -40,12 +41,14 @@ from kgb import SpyAgency
 from mock import Mock
 
 from djblets.extensions.extension import Extension, ExtensionInfo
+from djblets.extensions.forms import SettingsForm
 from djblets.extensions.hooks import (ExtensionHook, ExtensionHookPoint,
                                       SignalHook, TemplateHook, URLHook)
 from djblets.extensions.manager import (_extension_managers, ExtensionManager,
                                         SettingListWrapper)
 from djblets.extensions.settings import Settings
 from djblets.extensions.signals import settings_saved
+from djblets.extensions.views import configure_extension
 from djblets.testing.testcases import TestCase
 
 
@@ -126,6 +129,7 @@ class SettingsTest(TestCase):
 
 class TestExtensionWithRegistration(Extension):
     """Dummy extension for testing."""
+    id = 'TestExtensionWithRegistration'
     registration = Mock()
     registration.settings = dict()
 
@@ -737,8 +741,6 @@ class SignalHookTest(SpyAgency, TestCase):
         manager = ExtensionManager('')
         self.test_extension = \
             TestExtensionWithRegistration(extension_manager=manager)
-        self.patterns = patterns('',
-            (r'^url_hook_test/', include('djblets.extensions.test.urls')))
 
         self.signal = Signal()
         self.spy_on(self._on_signal_fired)
@@ -891,5 +893,38 @@ class TemplateHookTest(TestCase):
         # Didn't crash. We're good.
 
 
+class ViewTests(SpyAgency, TestCase):
+    """Unit tests for djblets.extensions.views."""
+    def setUp(self):
+        self.manager = ExtensionManager('')
+        self.extension = \
+            TestExtensionWithRegistration(extension_manager=self.manager)
+
+    def test_configure_extension_saving(self):
+        """Testing configure_extension with saving settings"""
+        class TestSettingsForm(SettingsForm):
+            mykey = forms.CharField(max_length=100)
+
+        self.extension.is_configurable = True
+        self.spy_on(self.manager.get_enabled_extension,
+                    call_fake=lambda *args: self.extension)
+
+        request = Mock()
+        request.path = '/config'
+        request.method = 'POST'
+        request.META = {
+            'CSRF_COOKIE': 'abc123',
+        }
+        request.POST = {
+            'mykey': 'myvalue',
+        }
+        request.FILES = {}
+
+        configure_extension(request, TestExtensionWithRegistration,
+                            TestSettingsForm, self.manager)
+
+        self.assertEqual(self.extension.settings.get('mykey'), 'myvalue')
+
+
 # A dummy function that acts as a View method
 test_view_method = Mock()
diff --git a/djblets/siteconfig/forms.py b/djblets/siteconfig/forms.py
index 2bdda46a7f6523a2d7a97aea67973a43bce20292..e728913b1894926ef4526690ecd9ac60ab5bafd2 100644
--- a/djblets/siteconfig/forms.py
+++ b/djblets/siteconfig/forms.py
@@ -35,10 +35,10 @@ class SiteSettingsForm(forms.Form):
     meant to be subclassed for different settings pages. Any fields defined
     by the form will be loaded/saved automatically.
     """
-    def __init__(self, siteconfig, request=None, *args, **kwargs):
-        forms.Form.__init__(self, *args, **kwargs)
+    def __init__(self, siteconfig, *args, **kwargs):
+        self.request = kwargs.pop('request', None)
+        super(SiteSettingsForm, self).__init__(*args, **kwargs)
         self.siteconfig = siteconfig
-        self.request = request
         self.disabled_fields = {}
         self.disabled_reasons = {}
 
diff --git a/djblets/siteconfig/views.py b/djblets/siteconfig/views.py
index f3074e03abd65c8738c6eac89fc7fae652c43f0a..4911ce232e3158a349b1a3888e5a78801ff5d6ee 100644
--- a/djblets/siteconfig/views.py
+++ b/djblets/siteconfig/views.py
@@ -45,7 +45,7 @@ def site_settings(request, form_class,
     siteconfig = SiteConfiguration.objects.get_current()
 
     if request.method == "POST":
-        form = form_class(siteconfig, data=request.POST, files=request.FILES,
+        form = form_class(siteconfig, request.POST, request.FILES,
                           request=request)
 
         if form.is_valid():
