diff --git a/apps/__init__.py b/apps/__init__.py index f93d0bec7..597573362 100644 --- a/apps/__init__.py +++ b/apps/__init__.py @@ -1,7 +1,7 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# - - -if __name__ == '__main__': - pass +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# + + +if __name__ == '__main__': + pass diff --git a/apps/jumpserver/settings.py b/apps/jumpserver/settings.py index 00be039e1..94d3215a6 100644 --- a/apps/jumpserver/settings.py +++ b/apps/jumpserver/settings.py @@ -47,6 +47,7 @@ INSTALLED_APPS = [ 'ops.apps.OpsConfig', 'audits.apps.AuditsConfig', 'common.apps.CommonConfig', + 'rest_framework', 'bootstrapform', # 'django.contrib.admin', 'django.contrib.auth', @@ -168,6 +169,13 @@ BOOTSTRAP_COLUMN_COUNT = 11 # Init data or generate fake data source for development FIXTURE_DIRS = [os.path.join(BASE_DIR, 'fixtures'), ] +REST_FRAMEWORK = { + # Use Django's standard `django.contrib.auth` permissions, + # or allow read-only access for unauthenticated users. + 'DEFAULT_PERMISSION_CLASSES': [ + 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' + ], +} # This setting is required to override the Django's main loop, when running in # development mode, such as ./manage runserver WSGI_APPLICATION = 'ws4redis.django_runserver.application' @@ -190,4 +198,4 @@ WS4REDIS_PREFIX = 'demo' SESSION_ENGINE = 'redis_sessions.session' -SESSION_REDIS_PREFIX = 'session' \ No newline at end of file +SESSION_REDIS_PREFIX = 'session' diff --git a/apps/jumpserver/urls.py b/apps/jumpserver/urls.py index 1e39950c7..c6d525871 100644 --- a/apps/jumpserver/urls.py +++ b/apps/jumpserver/urls.py @@ -35,6 +35,10 @@ urlpatterns = [ # url(r'^admin/', admin.site.urls), ] +urlpatterns += [ + url(r'^api/users/', include('users.api_urls')), +] + if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/apps/users/api.py b/apps/users/api.py index ecbf4289f..1970a6d0f 100644 --- a/apps/users/api.py +++ b/apps/users/api.py @@ -1,3 +1,12 @@ # ~*~ coding: utf-8 ~*~ -# +# +from rest_framework import viewsets + +from .serializers import UserSerializer +from .models import User, UserGroup, Role + + +class UserViewSet(viewsets.ModelViewSet): + queryset = User.objects.all() + serializer_class = UserSerializer diff --git a/apps/users/api_urls.py b/apps/users/api_urls.py new file mode 100644 index 000000000..40a1ff414 --- /dev/null +++ b/apps/users/api_urls.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# + +from django.conf.urls import url, include +from rest_framework import routers + +from .api import UserViewSet + + +router = routers.DefaultRouter() +router.register(r'users', UserViewSet) + +urlpatterns = [ + url(r'v1/', include(router.urls)), + url(r'^api-auth/', include('rest_framework.urls', namespace='rest_fr \ No newline at end of file diff --git a/apps/users/serializers.py b/apps/users/serializers.py new file mode 100644 index 000000000..e08b52b47 --- /dev/null +++ b/apps/users/serializers.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# + +from rest_framework import serializers + +from .models import Role, User, UserGroup + + +class UserSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = User + fields = \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 7c9d1a5cd..34c61c4ce 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,3 +11,5 @@ redis==2.10.5 six==1.10.0 wcwidth==0.1.7 websocket-client==0.37.0 +djangorestframework==3.4.5 +ForgeryPy==0.1