Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
J
jumpserver
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ops
jumpserver
Commits
e355c7b8
Commit
e355c7b8
authored
Aug 20, 2016
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Modify pagination and Role model
parent
7789c8d1
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
81 additions
and
48 deletions
+81
-48
common_tags.py
apps/common/templatetags/common_tags.py
+27
-0
settings.py
apps/jumpserver/settings.py
+31
-6
_pagination.html
apps/templates/_pagination.html
+14
-6
forms.py
apps/users/forms.py
+1
-1
models.py
apps/users/models.py
+6
-0
views.py
apps/users/views.py
+2
-2
hardcopy.0
hardcopy.0
+0
-33
No files found.
apps/common/templatetags/common_tags.py
View file @
e355c7b8
...
...
@@ -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
)
apps/jumpserver/settings.py
View file @
e355c7b8
...
...
@@ -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
=
Tru
e
DEBUG
=
CONFIG
.
DEBUG
or
Fals
e
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
=
{
if
CONFIG
.
DB_ENGINE
==
'sqlite'
:
DATABASES
=
{
'default'
:
{
'ENGINE'
:
'django.db.backends.sqlite3'
,
'NAME'
:
os
.
path
.
join
(
BASE_DIR
,
'db.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
(
'
\\
'
,
'/'
)
+
'/'
apps/templates/_pagination.html
View file @
e355c7b8
{% load common_tags %}
{% if is_paginated %}
<div
class=
"row"
>
<div
class=
"col-sm-6"
>
...
...
@@ -9,17 +10,24 @@
<div
class=
"dataTables_paginate paging_simple_numbers"
id=
"editable_paginate"
>
<ul
class=
"pagination"
style=
"margin-top: 0; float: right"
>
{% if page_obj.has_previous %}
<li
class=
"paginate_button previous"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_previous"
>
<a
class=
"page"
href=
"?page={{ page_obj.previous_page_number }}"
>
Previous
</a>
<li
class=
"paginate_button previous"
aria-controls=
"editable"
tabindex=
"0"
id=
"previous"
>
<a
data-page=
"next"
href=
"?page={{ page_obj.previous_page_number}}"
>
‹
</a>
</li>
{% endif %}
{% for page in paginator.num_pages|pagination_range:page_obj.number %}
{% if page == page_obj.number %}
<li
class=
"paginate_button active"
aria-controls=
"editable"
tabindex=
"0"
>
<a
class=
"page"
href=
"?page={{ page_obj.number }}"
title=
"第{{ page_obj.number }}页"
>
{{ page_obj.number }}
</a>
{% else %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
>
{% endif %}
<a
class=
"page"
href=
"?page={{ page }}"
title=
"第{{ page }}页"
>
{{ page }}
</a>
</li>
{% endfor %}
{% if page_obj.has_next %}
<li
class=
"paginate_button next"
aria-controls=
"editable"
tabindex=
"0"
id=
"
editable_
next"
>
<a
class=
"page"
href=
"?page={{ page_obj.next_page_number }}"
>
Next
</a>
<li
class=
"paginate_button next"
aria-controls=
"editable"
tabindex=
"0"
id=
"next"
>
<a
data-page=
"next"
href=
"?page={{ page_obj.next_page_number }}"
>
›
</a>
</li>
{% endif %}
</ul>
...
...
apps/users/forms.py
View file @
e355c7b8
...
...
@@ -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
):
...
...
apps/users/models.py
View file @
e355c7b8
...
...
@@ -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
=
{
...
...
apps/users/views.py
View file @
e355c7b8
...
...
@@ -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'
)
...
...
hardcopy.0
deleted
100644 → 0
View file @
7789c8d1
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)
<ipython-input-6-94520763e8e7> in <module>()
----> 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]: <QuerySet [<User: christina86>, <User: tina71>, <User: emily71>, <User: tammy66>, <User: sarah66>, <User: linda75>, <User: ev
elyn88>, <User: mildred72>, <User: sharon93>, <User: christina88>, <User: heather80>, <User: amy80>, <User: julia81>, <User: sarah89>
, <User: phillip74>, <User: kimberly74>, <User: ann73>, <User: helen63>, <User: joyce77>, <User: debra67>, '...(remaining elements tr
uncated)...']>
In [8]: group.user_set
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment