Browse Source

Discover admin URL's

Rafał Pitoń 11 years ago
parent
commit
cadbad28e4

+ 36 - 0
docs/developers/admin_actions.rst

@@ -0,0 +1,36 @@
+=========================
+Writing New Admin Actions
+=========================
+
+
+Misago Admin vs. Django Admin
+=============================
+
+Misago brings its own admin site just like Django `does <https://docs.djangoproject.com/en/1.6/#the-admin>`_. This means you have to make a decision which one your app will use for administration.
+
+If you intend to be sole user of your app, Django admin will propably be faster to get going. However if you plan for your app to be available to wider audience, its good for your admin interface to be part of Misago admin site. This will require you to write more code than intended, but will give your users more consistent experience and, in case for some languages, save them of quirkyness that comes with django admin automatic messages.
+
+
+Writing Admin Views
+===================
+
+
+Registering in Misago Admin
+===========================
+
+Misago Admin Site is just an hierarchy of links defined in apps and registered within ``misago.admin.site`` object.
+
+
+Registering urls under ``misago:admin`` namespace
+-------------------------------------------------
+
+Your admin views will live under ``misago:admin`` namespace, which means they should be defined in special manner. Similiarly to Django, Misago uses small discovery routine which finds patterns belonging to its admin namespace.
+
+
+Depending on structure of your app and your tastes, you can define your admin patterns in one of three ways:
+
+* as **adminurlpatterns** variable in **yourapp.urls** module
+* as **urlpatterns** variable in **yourapp.urls.admin** module
+* as **urlpatterns** variable in **yourapp.adminurls** module
+
+Each of those is checked, but only first one to be found is used.

+ 1 - 0
docs/developers/index.rst

@@ -33,6 +33,7 @@ Following references cover everything you want to know about writing your own ap
 
    coding_style
    shortcuts
+   admin_actions
    views_errors
    forms
    decorators

+ 1 - 0
docs/index.rst

@@ -22,6 +22,7 @@ Table of Contents
    developers/index
    developers/coding_style
    developers/shortcuts
+   developers/admin_actions
    developers/views_errors
    developers/forms
    developers/decorators

+ 21 - 1
misago/admin/urls.py

@@ -1,5 +1,7 @@
 from django.conf import settings
 from django.conf.urls import patterns, include, url
+from django.core.exceptions import ImproperlyConfigured
+from django.utils.module_loading import import_by_path
 
 
 urlpatterns = patterns('misago.admin.views',
@@ -8,10 +10,28 @@ urlpatterns = patterns('misago.admin.views',
     # at Misago Admin and will be checked by Misago Admin Middleware
     url(r'^$', 'index.admin_index', name='index'),
     url(r'^logout/$', 'auth.logout', name='logout'),
-    url(r'^settings/$', 'index.admin_index', name='settings'),
 )
 
 
+def discover_admin_urls():
+    SEARCH_PATTERNS = (
+        '%s.urls.adminurlpatterns',
+        '%s.urls.admin.urlpatterns',
+        '%s.adminurls.urlpatterns',
+        )
+    admin_patterns = []
+
+    for app in settings.INSTALLED_APPS:
+        for pattern in SEARCH_PATTERNS:
+            try:
+                admin_patterns += import_by_path(pattern % app)
+                continue
+            except ImproperlyConfigured:
+                pass
+
+    return admin_patterns
+
+
 """
 TEST PATTERNS FOR GOD OF TEST PATTERNS
 """

+ 0 - 0
misago/conf/forms.py


+ 1 - 18
misago/conf/models.py

@@ -75,24 +75,7 @@ admin_site.add_node(
 
 admin_site.add_node(
     parent='misago:admin',
-    link='misago:admin:settings',
+    link='misago:admin:settings:index',
     icon='fa fa-gears',
     name=_("Settings"),
     )
-
-admin_site.add_node(
-    parent='misago:admin',
-    namespace='users',
-    after='misago:admin:settings',
-    link='misago:admin:users:accounts:list',
-    icon='fa fa-user',
-    name=_("Users"),
-    )
-
-admin_site.add_node(
-    parent='misago:admin:users',
-    namespace='accounts',
-    link='misago:admin:users:accounts:list',
-    icon='fa fa-user',
-    name=_("Accounts"),
-    )

+ 11 - 0
misago/conf/urls.py

@@ -0,0 +1,11 @@
+from django.conf import settings
+from django.conf.urls import patterns, include, url
+
+
+_urlpatterns = patterns('misago.conf.views',
+    url(r'^$', 'index', name='index'),
+)
+
+adminurlpatterns = patterns('misago.conf.views',
+    url(r'^settings/', include(_urlpatterns, namespace='settings')),
+)

+ 2 - 0
misago/conf/views.py

@@ -0,0 +1,2 @@
+def index(request):
+    raise Exception('WSUP, ADMIN SETTINGS GROUPZ!')

+ 9 - 1
misago/urls.py

@@ -1,5 +1,6 @@
 from django.conf import settings
 from django.conf.urls import patterns, include, url
+from misago.admin.urls import discover_admin_urls
 
 
 urlpatterns = patterns('misago.core.views',
@@ -17,7 +18,14 @@ urlpatterns += patterns('',
 
 # Register Misago ACP
 if settings.MISAGO_ADMIN_PATH:
+    # Admin patterns recognised by Misago
+    adminpatterns = patterns('',
+        url(r'^', include('misago.admin.urls')),
+    )
+
+    adminpatterns += discover_admin_urls()
+
     admin_prefix = r'^%s/' % settings.MISAGO_ADMIN_PATH
     urlpatterns += patterns('',
-        url(admin_prefix, include('misago.admin.urls', namespace='admin')),
+        url(admin_prefix, include(adminpatterns, namespace='admin')),
     )