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
7268a5c5
Commit
7268a5c5
authored
Apr 25, 2013
by
Tom Christie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added AutoRouter. Don't know if this is a good idea.
parent
5d01ae66
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
42 additions
and
4 deletions
+42
-4
rest_framework/routers.py
+42
-4
No files found.
rest_framework/routers.py
View file @
7268a5c5
...
@@ -14,12 +14,26 @@ For example, you might have a `urls.py` that looks something like this:
...
@@ -14,12 +14,26 @@ For example, you might have a `urls.py` that looks something like this:
urlpatterns = router.urls
urlpatterns = router.urls
"""
"""
from
django.conf.urls
import
url
,
patterns
from
django.conf.urls
import
url
,
patterns
from
django.db
import
models
from
rest_framework.decorators
import
api_view
from
rest_framework.decorators
import
api_view
from
rest_framework.response
import
Response
from
rest_framework.response
import
Response
from
rest_framework.reverse
import
reverse
from
rest_framework.reverse
import
reverse
from
rest_framework.viewsets
import
ModelViewSet
from
rest_framework.urlpatterns
import
format_suffix_patterns
from
rest_framework.urlpatterns
import
format_suffix_patterns
def
replace_methodname
(
format_string
,
methodname
):
"""
Partially format a format_string, swapping out any
'{methodname}'' or '{methodnamehyphen}'' components.
"""
methodnamehyphen
=
methodname
.
replace
(
'_'
,
'-'
)
ret
=
format_string
ret
=
ret
.
replace
(
'{methodname}'
,
methodname
)
ret
=
ret
.
replace
(
'{methodnamehyphen}'
,
methodnamehyphen
)
return
ret
class
BaseRouter
(
object
):
class
BaseRouter
(
object
):
def
__init__
(
self
):
def
__init__
(
self
):
self
.
registry
=
[]
self
.
registry
=
[]
...
@@ -66,7 +80,7 @@ class SimpleRouter(BaseRouter):
...
@@ -66,7 +80,7 @@ class SimpleRouter(BaseRouter):
{
{
'{httpmethod}'
:
'{methodname}'
,
'{httpmethod}'
:
'{methodname}'
,
},
},
'{basename}-{methodname}'
'{basename}-{methodname
hyphen
}'
),
),
]
]
...
@@ -89,13 +103,13 @@ class SimpleRouter(BaseRouter):
...
@@ -89,13 +103,13 @@ class SimpleRouter(BaseRouter):
ret
=
[]
ret
=
[]
for
url_format
,
method_map
,
name_format
in
self
.
routes
:
for
url_format
,
method_map
,
name_format
in
self
.
routes
:
if
method_map
==
{
'{httpmethod}'
:
'{methodname}'
}:
if
method_map
==
{
'{httpmethod}'
:
'{methodname}'
}:
# Dynamic routes
# Dynamic routes
(@link or @action decorator)
for
httpmethod
,
methodname
in
dynamic_routes
.
items
():
for
httpmethod
,
methodname
in
dynamic_routes
.
items
():
extra_kwargs
=
getattr
(
viewset
,
methodname
)
.
kwargs
extra_kwargs
=
getattr
(
viewset
,
methodname
)
.
kwargs
ret
.
append
((
ret
.
append
((
url_format
.
replace
(
'{methodname}'
,
methodname
),
replace_methodname
(
url_format
,
methodname
),
{
httpmethod
:
methodname
},
{
httpmethod
:
methodname
},
name_format
.
replace
(
'{methodname}'
,
methodname
),
replace_methodname
(
name_format
,
methodname
),
extra_kwargs
extra_kwargs
))
))
else
:
else
:
...
@@ -196,3 +210,27 @@ class DefaultRouter(SimpleRouter):
...
@@ -196,3 +210,27 @@ class DefaultRouter(SimpleRouter):
urls
=
format_suffix_patterns
(
urls
)
urls
=
format_suffix_patterns
(
urls
)
return
urls
return
urls
class
AutoRouter
(
DefaultRouter
):
"""
A router class that doesn't require you to register any viewsets,
but instead automatically creates routes for all installed models.
Useful for quick and dirty prototyping.
"""
def
__init__
(
self
):
super
(
AutoRouter
,
self
)
.
__init__
()
for
model
in
models
.
get_models
():
prefix
=
model
.
_meta
.
verbose_name_plural
.
replace
(
' '
,
'_'
)
basename
=
model
.
_meta
.
object_name
.
lower
()
classname
=
model
.
__name__
DynamicViewSet
=
type
(
classname
,
(
ModelViewSet
,),
{}
)
DynamicViewSet
.
model
=
model
self
.
register
(
prefix
,
DynamicViewSet
,
basename
)
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