Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
flask-admin
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Python-Dev
flask-admin
Commits
73b28026
Commit
73b28026
authored
Dec 24, 2012
by
Serge S. Koval
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #134 from plaes/expose_plugview
Support for nested flask.views.MethodView
parents
199ccd1f
5c7fbde5
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
124 additions
and
8 deletions
+124
-8
mod_base.rst
doc/api/mod_base.rst
+2
-1
methodview.py
examples/methodview/methodview.py
+44
-0
methodtest.html
examples/methodview/templates/methodtest.html
+12
-0
test.html
examples/methodview/templates/test.html
+7
-0
__init__.py
flask_admin/__init__.py
+1
-1
base.py
flask_admin/base.py
+6
-5
method.html
flask_admin/tests/templates/method.html
+1
-0
test_base.py
flask_admin/tests/test_base.py
+51
-1
No files found.
doc/api/mod_base.rst
View file @
73b28026
...
...
@@ -7,6 +7,7 @@
---------
.. autofunction:: expose
.. autofunction:: expose_plugview
.. autoclass:: BaseView
:members:
...
...
examples/methodview/methodview.py
0 → 100644
View file @
73b28026
from
flask
import
Flask
,
redirect
,
render_template
,
request
from
flask.ext
import
admin
from
flask.views
import
MethodView
class
ViewWithMethodViews
(
admin
.
BaseView
):
@
admin
.
expose
(
'/'
)
def
index
(
self
):
return
self
.
render
(
'methodtest.html'
)
@
admin
.
expose_plugview
(
'/_api/1'
)
class
API_v1
(
MethodView
):
def
get
(
self
,
cls
):
return
cls
.
render
(
'test.html'
,
request
=
request
,
name
=
"API_v1"
)
def
post
(
self
,
cls
):
return
cls
.
render
(
'test.html'
,
request
=
request
,
name
=
"API_v1"
)
@
admin
.
expose_plugview
(
'/_api/2'
)
class
API_v2
(
MethodView
):
def
get
(
self
,
cls
):
return
cls
.
render
(
'test.html'
,
request
=
request
,
name
=
"API_v2"
)
def
post
(
self
,
cls
):
return
cls
.
render
(
'test.html'
,
request
=
request
,
name
=
"API_v2"
)
# Create flask app
app
=
Flask
(
__name__
,
template_folder
=
'templates'
)
# Flask views
@
app
.
route
(
'/'
)
def
index
():
return
redirect
(
'/admin'
)
if
__name__
==
'__main__'
:
# Create admin interface
admin
=
admin
.
Admin
()
admin
.
add_view
(
ViewWithMethodViews
())
admin
.
init_app
(
app
)
# Start app
app
.
debug
=
True
app
.
run
()
examples/methodview/templates/methodtest.html
0 → 100644
View file @
73b28026
{% extends 'admin/master.html' %}
{% block body %}
Hello World from MethodTest!
<br/>
<form
method=
"POST"
action=
"{{ url_for('.API_v1') }}"
>
<input
type=
"submit"
value=
"API v1 via POST"
>
<a
href=
"{{ url_for('.API_v1') }}"
>
v1 via GET
</a>
</form>
<form
method=
"POST"
action=
"{{ url_for('.API_v2') }}"
>
<input
type=
"submit"
value=
"API v2 via POST"
>
<a
href=
"{{ url_for('.API_v2') }}"
>
v2 via GET
</a>
</form>
{% endblock %}
examples/methodview/templates/test.html
0 → 100644
View file @
73b28026
{% extends 'admin/master.html' %}
{% block body %}
This view {{ name }} was accessed using {{ request.method }} request.
<br>
<a
href=
"{{ url_for('.index') }}"
>
Return
</a>
{% endblock %}
flask_admin/__init__.py
View file @
73b28026
...
...
@@ -3,4 +3,4 @@ __author__ = 'Serge S. Koval'
__email__
=
'serge.koval+github@gmail.com'
from
.base
import
expose
,
expose_
class
,
Admin
,
BaseView
,
AdminIndexView
from
.base
import
expose
,
expose_
plugview
,
Admin
,
BaseView
,
AdminIndexView
flask_admin/base.py
View file @
73b28026
...
...
@@ -22,20 +22,21 @@ def expose(url='/', methods=('GET',)):
f
.
_urls
=
[]
f
.
_urls
.
append
((
url
,
methods
))
return
f
return
wrap
def
expose_
class
(
url
=
'/'
):
def
expose_
plugview
(
url
=
'/'
):
"""
User this decorator to expose ``View`` classes (flask.MethodView).
Decorator to expose Flask's pluggable view classes
(``flask.views.View`` or ``flask.views.MethodView``).
:param url:
Relative URL for the view
.. versionadded:: 1.0.4
"""
def
wrap
(
v
):
name
=
v
.
__name__
return
expose
(
url
)(
v
.
as_view
(
name
))
return
expose
(
url
,
v
.
methods
)(
v
.
as_view
(
v
.
__name__
))
return
wrap
...
...
flask_admin/tests/templates/method.html
0 → 100644
View file @
73b28026
{{ request.method }} - {{ name }}
\ No newline at end of file
flask_admin/tests/test_base.py
View file @
73b28026
from
nose.tools
import
ok_
,
eq_
,
raises
from
flask
import
Flask
from
flask
import
Flask
,
request
from
flask.views
import
MethodView
from
flask.ext.admin
import
base
...
...
@@ -29,6 +30,28 @@ class MockView(base.BaseView):
else
:
return
False
class
MockMethodView
(
base
.
BaseView
):
@
base
.
expose
(
'/'
)
def
index
(
self
):
return
'Success!'
@
base
.
expose_plugview
(
'/_api/1'
)
class
API1
(
MethodView
):
def
get
(
self
,
cls
):
return
cls
.
render
(
'method.html'
,
request
=
request
,
name
=
'API1'
)
def
post
(
self
,
cls
):
return
cls
.
render
(
'method.html'
,
request
=
request
,
name
=
'API1'
)
def
put
(
self
,
cls
):
return
cls
.
render
(
'method.html'
,
request
=
request
,
name
=
'API1'
)
def
delete
(
self
,
cls
):
return
cls
.
render
(
'method.html'
,
request
=
request
,
name
=
'API1'
)
@
base
.
expose_plugview
(
'/_api/2'
)
class
API2
(
MethodView
):
def
get
(
self
,
cls
):
return
cls
.
render
(
'method.html'
,
request
=
request
,
name
=
'API2'
)
def
post
(
self
,
cls
):
return
cls
.
render
(
'method.html'
,
request
=
request
,
name
=
'API2'
)
def
test_baseview_defaults
():
view
=
MockView
()
...
...
@@ -229,3 +252,30 @@ def test_double_init():
app
=
Flask
(
__name__
)
admin
=
base
.
Admin
(
app
)
admin
.
init_app
(
app
)
def
test_nested_flask_views
():
app
=
Flask
(
__name__
)
admin
=
base
.
Admin
(
app
)
view
=
MockMethodView
()
admin
.
add_view
(
view
)
client
=
app
.
test_client
()
rv
=
client
.
get
(
'/admin/mockmethodview/_api/1'
)
assert
rv
.
data
==
'GET - API1'
rv
=
client
.
put
(
'/admin/mockmethodview/_api/1'
)
assert
rv
.
data
==
'PUT - API1'
rv
=
client
.
post
(
'/admin/mockmethodview/_api/1'
)
assert
rv
.
data
==
'POST - API1'
rv
=
client
.
delete
(
'/admin/mockmethodview/_api/1'
)
assert
rv
.
data
==
'DELETE - API1'
rv
=
client
.
get
(
'/admin/mockmethodview/_api/2'
)
assert
rv
.
data
==
'GET - API2'
rv
=
client
.
post
(
'/admin/mockmethodview/_api/2'
)
assert
rv
.
data
==
'POST - API2'
rv
=
client
.
delete
(
'/admin/mockmethodview/_api/2'
)
assert
rv
.
status_code
==
405
rv
=
client
.
put
(
'/admin/mockmethodview/_api/2'
)
assert
rv
.
status_code
==
405
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