0

使用python shell,我在flask-admin / pymongo / flask上戳,并试图弄清楚我是否可以诱使它转储它将为给定页面生成的html。

我粘贴到 python shell 的代码如下:

from flask import Flask
from flask.ext.admin import Admin
from flask.ext.admin.contrib.pymongo import ModelView
from wtforms import form, fields
import pymongo

class UserForm(form.Form):
    dispname = fields.TextField('Name')
    email = fields.TextField('Email')

class UserView(ModelView):
    column_list = ('dispname', 'email', 'username', 'userextra')
    form = UserForm

client = pymongo.MongoClient()
db = client['cloud']
app = Flask('putting_a_name_here')
admin = Admin(app)
admin.add_view(UserView(db['userpgs']))

#app.run(host='0.0.0.0') # If this is uncommented connecting to
                         # http://localhost:5000/admin/userpgsview
                         # properly renders the contents of the mongo
                         # collection 'userpgs' in db 'cloud'

(我意识到通过在示例中保留flask-adminand pymongo/使这变得相当复杂flask.ext.admin.contrib.pymongo,但flask-admin呈现/html 是我真正想要理解的。)

我无法找到有关如何调用/使用烧瓶渲染/html 的直接文档,但是通过向库添加一些调试,我已经能够看到上面的代码导致烧瓶中的蓝图/规则代码运行和填充我app调用view_functions的带有函数回调的列表(带有有希望的名称,例如userpgsview.ajax_loopup,userpgsview.index_view等)。

, index_view(来自其他调试)似乎绑定到 urladmin/userpgsviw/是我最想了解的,所以我开始尝试:

>>> app.view_functions.get(u'userpgsview.index_view')()

这导致了异常的回溯RuntimeError: working outside of application context

在使用python shell的烧瓶文档中挖掘我发现了有关设置上下文的信息,所以我做了以下

ctx=app.test_request_context()
ctx.push()
app.preprocess_request()

并再次尝试,结果是:

>>> app.view_functions.get(u'userpgsview.index_view')()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/flask_admin/base.py", line 62, in inner
    return f(self, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/flask_admin/base.py", line 62, in inner
    return f(self, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/flask_admin/base.py", line 62, in inner
    return f(self, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/flask_admin/model/base.py", line 1191, in index_view
    filters),
  File "/usr/local/lib/python2.7/dist-packages/flask_admin/model/base.py", line 1062, in _get_url
    return url_for(view, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/flask/helpers.py", line 312, in url_for
    return appctx.app.handle_url_build_error(error, endpoint, values)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1641, in handle_url_build_error
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python2.7/dist-packages/flask/helpers.py", line 305, in url_for
    force_external=external)
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/routing.py", line 1620, in build
    raise BuildError(endpoint, values, method)
werkzeug.routing.BuildError: ('index_view', {}, None)

而且我还没有找到任何关于如何初始化事物的线索,所以werkzeug.routing很高兴。

弗兰克,如果我从完全错误的方法中得出这个结论,我不会感到惊讶,但是我没有任何运气找到其他文档,我应该如何手动运行烧瓶,如果我的目标是哄它进入生成它将在 .html 的 html-get 上创建的 html http://localhost:5000/admin/userpgsview

任何想法都会非常受欢迎。

4

1 回答 1

0

您应该能够使用Flask 测试客户端来模拟请求:

# Instead of test_request_context
client = app.test_client()
response = client.get("/admin/userpgsview")
# work with response here
于 2014-05-01T01:46:26.937 回答