Modify urls.conf: Merge to single

pull/530/head
ibuler 2016-08-25 13:28:02 +08:00
parent 8aa92bb688
commit 0a9e4a5e85
8 changed files with 29 additions and 16 deletions

View File

@ -182,6 +182,7 @@ WSGI_APPLICATION = 'ws4redis.django_runserver.application'
# URL that distinguishes websocket connections from normal requests # URL that distinguishes websocket connections from normal requests
WEBSOCKET_URL = '/ws/' WEBSOCKET_URL = '/ws/'
# WebSocket Redis # WebSocket Redis
WS4REDIS_CONNECTION = { WS4REDIS_CONNECTION = {
'host': '127.0.0.1', 'host': '127.0.0.1',

View File

@ -20,24 +20,22 @@ from django.views.generic.base import TemplateView
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
def view(request, **kwargs): # def view(request, **kwargs):
if kwargs: # if kwargs:
print kwargs # print kwargs
return HttpResponseRedirect('/' + kwargs["module"] + '/' + kwargs["version"] + '/' + kwargs["api"]) # return HttpResponseRedirect('/' + kwargs["module"] + '/' + kwargs["version"] + '/' + kwargs["api"])
urlpatterns = [ urlpatterns = [
url(r'^$', TemplateView.as_view(template_name='base.html')), url(r'^$', TemplateView.as_view(template_name='base.html')),
url(r'^users/', include('users.urls')), url(r'^(api/)?users/', include('users.urls')),
url(r'^assets/', include('assets.urls')), url(r'^assets/', include('assets.urls')),
url(r'^terminal/', include('webterminal.urls')), url(r'^terminal/', include('webterminal.urls')),
# url(r'^api/(?P<version>.*)/(?P<module>.*)/(?P<api>.*)', view),
# url(r'^admin/', admin.site.urls),
] ]
urlpatterns += [ #urlpatterns += [
url(r'^api/users/', include('users.api_urls')), # url(r'^api/users/', include('users.api_urls')),
] #]
if settings.DEBUG: if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

View File

@ -4,10 +4,11 @@
from django.conf.urls import url, include from django.conf.urls import url, include
import api import api
app_name = 'users'
urlpatterns = [ urlpatterns = [
url(r'^v1/users/$', api.UserListAddApi.as_view(), name='user-list-api'), url(r'^v1/users/$', api.UserListAddApi.as_view(), name='user-list-api'),
url(r'^v1/users/(?P<pk>[0-9]+)/$', api.UserDetailDeleteUpdateApi.as_view(), name='user-detail-api'), url(r'^v1/users/(?P<pk>[0-9]+)/$', api.UserDetailDeleteUpdateApi.as_view(), name='user-detail-api'),
url(r'^v1/usergroups/$', api.UserGroupListAddApi.as_view(), name='usergroup-list-api'), url(r'^v1/usergroups/$', api.UserGroupListAddApi.as_view(), name='usergroup-list-api'),
url(r'^v1/usergroups/(?P<pk>[0-9]+)/$', api.UserGroupDetailDeleteUpdateApi.as_view(), url(r'^v1/usergroups/(?P<pk>[0-9]+)/$', api.UserGroupDetailDeleteUpdateApi.as_view(), name='usergroup-detail-api'),
name='usergroup-detail-api'),
] ]

View File

@ -25,7 +25,7 @@ from django.db import OperationalError
# return self.name # return self.name
# #
# def delete(self, using=None, keep_parents=False): # def delete(self, using=None, keep_parents=False):
# if self.user_set.all().count() > 0: # if self.users.all().count() > 0:
# raise OperationalError('Role %s has some member, should not be delete.' % self.name) # raise OperationalError('Role %s has some member, should not be delete.' % self.name)
# else: # else:
# return super(Role, self).delete(using=using, keep_parents=keep_parents) # return super(Role, self).delete(using=using, keep_parents=keep_parents)
@ -99,7 +99,7 @@ class User(AbstractUser):
username = models.CharField(max_length=20, unique=True, verbose_name='用户名') username = models.CharField(max_length=20, unique=True, verbose_name='用户名')
name = models.CharField(max_length=20, blank=True, verbose_name='姓名') name = models.CharField(max_length=20, blank=True, verbose_name='姓名')
email = models.EmailField(max_length=30, unique=True, verbose_name='邮件') email = models.EmailField(max_length=30, unique=True, verbose_name='邮件')
groups = models.ManyToManyField(UserGroup, blank=True, verbose_name='用户组') groups = models.ManyToManyField(UserGroup, related_name='users', blank=True, verbose_name='用户组')
role = models.CharField(choices=ROLE_CHOICES, default='User', max_length=10, blank=True, verbose_name='角色') role = models.CharField(choices=ROLE_CHOICES, default='User', max_length=10, blank=True, verbose_name='角色')
avatar = models.ImageField(upload_to="avatar", verbose_name='头像') avatar = models.ImageField(upload_to="avatar", verbose_name='头像')
wechat = models.CharField(max_length=30, blank=True, verbose_name='微信') wechat = models.CharField(max_length=30, blank=True, verbose_name='微信')

View File

@ -7,6 +7,8 @@ from .models import User, UserGroup
class UserSerializer(serializers.ModelSerializer): class UserSerializer(serializers.ModelSerializer):
groups = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='users:usergroup-detail-api')
class Meta: class Meta:
model = User model = User
exclude = [ exclude = [
@ -16,6 +18,8 @@ class UserSerializer(serializers.ModelSerializer):
class UserGroupSerializer(serializers.ModelSerializer): class UserGroupSerializer(serializers.ModelSerializer):
users = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='users:user-detail-api')
class Meta: class Meta:
model = UserGroup model = UserGroup
fields = '__all__' fields = '__all__'

View File

@ -26,7 +26,7 @@
{{ usergroup.name }} {{ usergroup.name }}
</a> </a>
</td> </td>
<td class="text-center">{{ usergroup.user_set.all|length }}</td> <td class="text-center">{{ usergroup.users.all|length }}</td>
<td class="text-center">数量</td> <td class="text-center">数量</td>
<th class="text-center">{{ usergroup.comment|truncatewords:8 }}</th> <th class="text-center">{{ usergroup.comment|truncatewords:8 }}</th>
<td class="text-center"> <td class="text-center">

View File

@ -2,6 +2,7 @@ from django.conf.urls import url
from .views import UserListView, UserAddView, UserUpdateView, UserDeleteView, UserDetailView from .views import UserListView, UserAddView, UserUpdateView, UserDeleteView, UserDetailView
from .views import UserGroupListView, UserGroupAddView, UserGroupUpdateView, UserGroupDeleteView, UserGroupDetailView from .views import UserGroupListView, UserGroupAddView, UserGroupUpdateView, UserGroupDeleteView, UserGroupDetailView
import api
app_name = 'users' app_name = 'users'
@ -17,3 +18,11 @@ urlpatterns = [
url(r'^usergroup/(?P<pk>[0-9]+)/edit/$', UserGroupUpdateView.as_view(), name='usergroup-edit'), url(r'^usergroup/(?P<pk>[0-9]+)/edit/$', UserGroupUpdateView.as_view(), name='usergroup-edit'),
url(r'^usergroup/(?P<pk>[0-9]+)/delete/$', UserGroupDeleteView.as_view(), name='usergroup-delete'), url(r'^usergroup/(?P<pk>[0-9]+)/delete/$', UserGroupDeleteView.as_view(), name='usergroup-delete'),
] ]
urlpatterns += [
url(r'^v1/users/$', api.UserListAddApi.as_view(), name='user-list-api'),
url(r'^v1/users/(?P<pk>[0-9]+)/$', api.UserDetailDeleteUpdateApi.as_view(), name='user-detail-api'),
url(r'^v1/usergroups/$', api.UserGroupListAddApi.as_view(), name='usergroup-list-api'),
url(r'^v1/usergroups/(?P<pk>[0-9]+)/$', api.UserGroupDetailDeleteUpdateApi.as_view(), name='usergroup-detail-api'),
]

View File

@ -147,7 +147,7 @@ class UserGroupAddView(CreateView):
users_id_list = self.request.POST.getlist('users', []) users_id_list = self.request.POST.getlist('users', [])
users = [get_object_or_404(User, id=user_id) for user_id in users_id_list] users = [get_object_or_404(User, id=user_id) for user_id in users_id_list]
usergroup.created_by = self.request.user.username or 'Admin' usergroup.created_by = self.request.user.username or 'Admin'
usergroup.user_set.add(*tuple(users)) usergroup.users.add(*tuple(users))
usergroup.save() usergroup.save()
return super(UserGroupAddView, self).form_valid(form) return super(UserGroupAddView, self).form_valid(form)