Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
django-rest-framework
Overview
Overview
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
edx
django-rest-framework
Commits
e956d517
Commit
e956d517
authored
Jul 19, 2011
by
Tom Christie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "Added pagination mixin. Need to write tests"
This reverts commit
1eb2dfcc
.
parent
20a95db6
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
0 additions
and
89 deletions
+0
-89
djangorestframework/mixins.py
+0
-89
No files found.
djangorestframework/mixins.py
View file @
e956d517
...
@@ -4,7 +4,6 @@ classes that can be added to a `View`.
...
@@ -4,7 +4,6 @@ classes that can be added to a `View`.
"""
"""
from
django.contrib.auth.models
import
AnonymousUser
from
django.contrib.auth.models
import
AnonymousUser
from
django.core.paginator
import
Paginator
from
django.db.models.query
import
QuerySet
from
django.db.models.query
import
QuerySet
from
django.db.models.fields.related
import
ForeignKey
from
django.db.models.fields.related
import
ForeignKey
from
django.http
import
HttpResponse
from
django.http
import
HttpResponse
...
@@ -638,92 +637,4 @@ class ListModelMixin(object):
...
@@ -638,92 +637,4 @@ class ListModelMixin(object):
queryset
=
queryset
.
order_by
(
*
args
)
queryset
=
queryset
.
order_by
(
*
args
)
return
queryset
.
filter
(
**
kwargs
)
return
queryset
.
filter
(
**
kwargs
)
########## Pagination Mixins ##########
class
PaginatorMixin
(
object
):
"""
Adds pagination support to GET requests
Obviously should only be used on lists :)
A default limit can be set by setting `limit` on the object. This will also
be used as the maximum if the client sets the `limit` GET param
"""
limit
=
20
def
get_limit
(
self
):
""" Helper method to determine what the `limit` should be """
try
:
limit
=
int
(
self
.
request
.
GET
.
get
(
'limit'
,
self
.
limit
))
return
min
(
limit
,
self
.
limit
)
except
ValueError
:
return
self
.
limit
def
url_with_page_number
(
self
,
page_number
):
""" Constructs a url used for getting the next/previous urls """
url
=
"
%
s?page=
%
d"
%
(
self
.
request
.
path
,
page_number
)
limit
=
self
.
get_limit
()
if
limit
!=
self
.
limit
:
url
=
"
%
s&limit=
%
d"
%
(
url
,
limit
)
return
url
def
next
(
self
,
page
):
""" Returns a url to the next page of results (if any) """
if
not
page
.
has_next
():
return
None
return
self
.
url_with_page_number
(
page
.
next_page_number
())
def
previous
(
self
,
page
):
""" Returns a url to the previous page of results (if any) """
if
not
page
.
has_previous
():
return
None
return
self
.
url_with_page_number
(
page
.
previous_page_number
())
def
serialize_page_info
(
self
,
page
):
""" This is some useful information that is added to the response """
return
{
'next'
:
self
.
next
(
page
),
'page'
:
page
.
number
,
'pages'
:
page
.
paginator
.
num_pages
,
'per_page'
:
self
.
get_limit
(),
'previous'
:
self
.
previous
(
page
),
'total'
:
page
.
paginator
.
count
,
}
def
filter_response
(
self
,
obj
):
"""
Given the response content, paginate and then serialize.
The response is modified to include to useful data relating to the number
of objects, number of pages, next/previous urls etc. etc.
The serialised objects are put into `results` on this new, modified
response
"""
# We don't want to paginate responses for anything other than GET requests
if
self
.
method
.
upper
()
!=
'GET'
:
return
self
.
_resource
.
filter_response
(
obj
)
paginator
=
Paginator
(
obj
,
self
.
get_limit
())
try
:
page_num
=
int
(
self
.
request
.
GET
.
get
(
'page'
,
'1'
))
except
ValueError
:
page_num
=
1
if
page_num
not
in
paginator
.
page_range
:
raise
ErrorResponse
(
status
.
HTTP_404_NOT_FOUND
,
{
'detail'
:
'That page contains no results'
})
page
=
paginator
.
page
(
page_num
)
serialized_object_list
=
self
.
_resource
.
filter_response
(
page
.
object_list
)
serialized_page_info
=
self
.
serialize_page_info
(
page
)
serialized_page_info
[
'results'
]
=
serialized_object_list
return
serialized_page_info
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