From e355c7b8ef0f7ef3fd1e97d7902ddd2450b5cf10 Mon Sep 17 00:00:00 2001 From: ibuler Date: Sat, 20 Aug 2016 18:33:18 +0800 Subject: [PATCH] Modify pagination and Role model --- apps/common/templatetags/common_tags.py | 27 ++++++++++++++++ apps/jumpserver/settings.py | 41 ++++++++++++++++++++----- apps/templates/_pagination.html | 24 ++++++++++----- apps/users/forms.py | 2 +- apps/users/models.py | 6 ++++ apps/users/views.py | 4 +-- hardcopy.0 | 33 -------------------- 7 files changed, 85 insertions(+), 52 deletions(-) delete mode 100644 hardcopy.0 diff --git a/apps/common/templatetags/common_tags.py b/apps/common/templatetags/common_tags.py index 17fee6599..6dbebdf77 100644 --- a/apps/common/templatetags/common_tags.py +++ b/apps/common/templatetags/common_tags.py @@ -2,6 +2,7 @@ from django import template from django.utils import timezone +from django.conf import settings register = template.Library() @@ -18,3 +19,29 @@ def is_expired(datetime): return False else: return True + + +@register.filter +def pagination_range(total_page, current_num=1, display=5): + """Return Page range + + :param total_page: Total numbers of paginator + :param current_num: current display page num + :param display: Display as many as [:display:] page + + In order to display many page num on web like: + < 1 2 3 4 5 > + """ + try: + current_num = int(current_num) + except ValueError: + current_num = 1 + + start = current_num - display/2 if current_num > display/2 else 1 + end = start + display if start + display <= total_page else total_page + 1 + + return range(start, end) + + + + diff --git a/apps/jumpserver/settings.py b/apps/jumpserver/settings.py index 32ba50722..d226a41c7 100644 --- a/apps/jumpserver/settings.py +++ b/apps/jumpserver/settings.py @@ -11,21 +11,32 @@ https://docs.djangoproject.com/en/1.10/ref/settings/ """ import os +import sys + # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +sys.path.append(os.path.dirname(BASE_DIR)) + +# Import project config setting +try: + from config import config as env_config, env + CONFIG = env_config.get(env, 'default')() +except ImportError: + CONFIG = type('_', (), {'__getattr__': None})() + # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = '2vym+ky!997d5kkcc64mnz06y1mmui3lut#(^wd=%s_qj$1%xv' +SECRET_KEY = CONFIG.SECRET_KEY or '2vym+ky!997d5kkcc64mnz06y1mmui3lut#(^wd=%s_qj$1%x' # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True +DEBUG = CONFIG.DEBUG or False -ALLOWED_HOSTS = [] +ALLOWED_HOSTS = CONFIG.ALLOWED_HOSTS or [] # Application definition @@ -80,12 +91,24 @@ WSGI_APPLICATION = 'jumpserver.wsgi.application' # Database # https://docs.djangoproject.com/en/1.10/ref/settings/#databases -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), +if CONFIG.DB_ENGINE == 'sqlite': + DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': CONFIG.DB_NAME or os.path.join(BASE_DIR, 'db.sqlite3'), + } + } +else: + DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.%s' % CONFIG.DB_ENGINE, + 'NAME': CONFIG.DB_NAME, + 'HOST': CONFIG.DB_HOST, + 'PORT': CONFIG.DB_PORT, + 'USER': CONFIG.DB_USERNAME, + 'PASSWORD': CONFIG.DB_PASSWORD, + } } -} # Password validation @@ -133,3 +156,5 @@ STATICFILES_DIRS = ( AUTH_USER_MODEL = 'users.User' BOOTSTRAP_COLUMN_COUNT = 11 MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/') + '/' + + diff --git a/apps/templates/_pagination.html b/apps/templates/_pagination.html index 2ff5048f0..c4eb5eec7 100644 --- a/apps/templates/_pagination.html +++ b/apps/templates/_pagination.html @@ -1,3 +1,4 @@ +{% load common_tags %} {% if is_paginated %}
@@ -9,17 +10,24 @@
    {% if page_obj.has_previous %} - {% endif %} -
  • - {{ page_obj.number }} -
  • + + {% for page in paginator.num_pages|pagination_range:page_obj.number %} + {% if page == page_obj.number %} +
  • + {% else %} +
  • + {% endif %} + {{ page }} +
  • + {% endfor %} + {% if page_obj.has_next %} - {% endif %}
diff --git a/apps/users/forms.py b/apps/users/forms.py index 5ff6407fd..06791d61e 100644 --- a/apps/users/forms.py +++ b/apps/users/forms.py @@ -3,7 +3,7 @@ from django.forms import ModelForm from django import forms -from .models import User, UserGroup +from .models import User, UserGroup, Role class UserAddForm(ModelForm): diff --git a/apps/users/models.py b/apps/users/models.py index 326a8df55..eb31f3483 100644 --- a/apps/users/models.py +++ b/apps/users/models.py @@ -3,6 +3,9 @@ from __future__ import unicode_literals import datetime + +from django.db.models.signals import post_migrate +from django.dispatch import receiver from django.utils import timezone from django.db import models from django.contrib.auth.models import AbstractUser, Permission @@ -18,6 +21,9 @@ class Role(AbstractGroup): class Meta: db_table = 'role' + def init(self): + pass + @classmethod def init(cls): roles = { diff --git a/apps/users/views.py b/apps/users/views.py index f2a16ef4b..66ca0294f 100644 --- a/apps/users/views.py +++ b/apps/users/views.py @@ -6,6 +6,7 @@ from django.db.models import Q from django.views.generic.list import ListView from django.views.generic.edit import CreateView, DeleteView, UpdateView from django.views.generic.detail import DetailView +from django.conf import settings from .models import User, UserGroup, Role from .forms import UserAddForm, UserUpdateForm, UserGroupForm @@ -13,7 +14,7 @@ from .forms import UserAddForm, UserUpdateForm, UserGroupForm class UserListView(ListView): model = User - paginate_by = 20 + paginate_by = settings.CONFIG.DISPLAY_PER_PAGE context_object_name = 'user_list' template_name = 'users/user_list.html' ordering = '-date_joined' @@ -39,7 +40,6 @@ class UserListView(ListView): class UserAddView(CreateView): model = User form_class = UserAddForm - initial = {'role': Role.objects.get(name='User')} template_name = 'users/user_add.html' success_url = reverse_lazy('users:user-list') diff --git a/hardcopy.0 b/hardcopy.0 deleted file mode 100644 index 2cea73372..000000000 --- a/hardcopy.0 +++ /dev/null @@ -1,33 +0,0 @@ - 58 - -/root/env2.7/lib/python2.7/site-packages/django/db/models/fields/__init__.pyc in get_prep_value(self, value) - 944 if value is None: - 945 return None ---> 946 return int(value) - 947 - 948 def contribute_to_class(self, cls, name, **kwargs): - -TypeError: int() argument must be a string or a number, not 'QuerySet' - -In [6]: group.user_set.update(users) ---------------------------------------------------------------------------- -TypeError Traceback (most recent call last) - in () -----> 1 group.user_set.update(users) - -/root/env2.7/lib/python2.7/site-packages/django/db/models/manager.pyc in manager_method(self, *args, **kwargs) - 83 def create_method(name, method): - 84 def manager_method(self, *args, **kwargs): ----> 85 return getattr(self.get_queryset(), name)(*args, **kwargs) - 86 manager_method.__name__ = method.__name__ - 87 manager_method.__doc__ = method.__doc__ - -TypeError: update() takes exactly 1 argument (2 given) - -In [7]: users -Out[7]: , , , , , , , , , , , , , -, , , , , , , '...(remaining elements tr -uncated)...']> - -In [8]: group.user_set