mirror of
https://github.com/jazzband/django-admin2.git
synced 2026-03-16 22:20:24 +00:00
Adding an index resource for the API.
This commit is contained in:
parent
09a1f2465f
commit
68d6b96f84
3 changed files with 54 additions and 3 deletions
|
|
@ -1,9 +1,15 @@
|
|||
from django.utils.encoding import force_str
|
||||
from rest_framework import fields, generics, serializers
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.reverse import reverse
|
||||
from rest_framework.views import APIView
|
||||
from .views import Admin2Mixin
|
||||
|
||||
API_VERSION = '0.1'
|
||||
|
||||
|
||||
class Admin2APISerializer(serializers.HyperlinkedModelSerializer):
|
||||
_default_view_name = 'admin2:api_%(app_label)s_%(model_name)s_detail'
|
||||
_default_view_name = 'admin2:%(app_label)s_%(model_name)s_api-detail'
|
||||
|
||||
pk = fields.Field(source='pk')
|
||||
__str__ = fields.Field(source='__unicode__')
|
||||
|
|
@ -21,6 +27,41 @@ class Admin2APIMixin(Admin2Mixin):
|
|||
return super(Admin2APIMixin, self).get_serializer_class()
|
||||
|
||||
|
||||
class IndexAPIView(Admin2APIMixin, APIView):
|
||||
registry = None
|
||||
|
||||
def get_model_data(self, model, modeladmin):
|
||||
opts = {
|
||||
'app_label': model._meta.app_label,
|
||||
'model_name': model._meta.object_name.lower(),
|
||||
}
|
||||
model_url = reverse(
|
||||
'admin2:%(app_label)s_%(model_name)s_api-list' % opts,
|
||||
request=self.request,
|
||||
format=self.kwargs.get('format'))
|
||||
return {
|
||||
'url': model_url,
|
||||
'verbose_name': force_str(model._meta.verbose_name),
|
||||
'verbose_name_plural': force_str(model._meta.verbose_name_plural),
|
||||
}
|
||||
|
||||
def get(self, request):
|
||||
index_data = {
|
||||
'version': API_VERSION,
|
||||
'apps': [],
|
||||
}
|
||||
for model, modeladmin in self.registry.items():
|
||||
app_data = {
|
||||
'url': '-- todo --',
|
||||
'app_label': '-- todo --',
|
||||
'models': [
|
||||
self.get_model_data(model, modeladmin),
|
||||
],
|
||||
}
|
||||
index_data['apps'].append(app_data)
|
||||
return Response(index_data)
|
||||
|
||||
|
||||
class ListCreateAPIView(Admin2APIMixin, generics.ListCreateAPIView):
|
||||
pass
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ from django.core.exceptions import ImproperlyConfigured
|
|||
from django.utils.importlib import import_module
|
||||
|
||||
|
||||
from . import apiviews
|
||||
from . import models
|
||||
from . import views
|
||||
|
||||
|
|
@ -17,6 +18,7 @@ class Admin2(object):
|
|||
It also provides an index view that serves as an entry point to the admin site.
|
||||
"""
|
||||
index_view = views.IndexView
|
||||
api_index_view = apiviews.IndexAPIView
|
||||
|
||||
def __init__(self, name='admin2'):
|
||||
self.registry = {}
|
||||
|
|
@ -82,9 +84,15 @@ class Admin2(object):
|
|||
'apps': self.apps,
|
||||
}
|
||||
|
||||
def get_api_index_kwargs(self):
|
||||
return {
|
||||
'registry': self.registry,
|
||||
}
|
||||
|
||||
def get_urls(self):
|
||||
urlpatterns = patterns('',
|
||||
url(r'^$', self.index_view.as_view(), name='index'),
|
||||
url(r'^$', self.index_view.as_view(**self.get_index_kwargs()), name='dashboard'),
|
||||
url(r'^api/v0/$', self.api_index_view.as_view(**self.get_index_kwargs()), name='api'),
|
||||
)
|
||||
for model, modeladmin in self.registry.iteritems():
|
||||
urlpatterns += patterns('',
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
# Import your custom models
|
||||
from .models import Post, Comment
|
||||
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth.models import Group, Permission, User
|
||||
|
||||
|
||||
import djadmin2
|
||||
|
|
@ -18,3 +18,5 @@ class UserAdmin2(ModelAdmin2):
|
|||
djadmin2.default.register(Post)
|
||||
djadmin2.default.register(Comment)
|
||||
djadmin2.default.register(User, UserAdmin2)
|
||||
djadmin2.default.register(Permission)
|
||||
djadmin2.default.register(Group)
|
||||
|
|
|
|||
Loading…
Reference in a new issue