我在App Engine(python)中对MVC,GUI +交互式可视化有什么选择?

时间:2011-06-11 04:06:27

标签: python django google-app-engine user-interface visualization

我正在创建一个应用程序,允许用户查询,操作和浏览非常大的图表。

为我的项目创建gui +可视化的“最佳”方法是什么?

我认为最好的意思如下:
1.符合网络标准,没有月份解决方案的味道
2.允许创造性的灵活性 3.直观,不需要数周学习和数月掌握

我应该开始潜入Django并了解其MVC是如何工作的吗?我读过的所有东西都是关于Django的,但它似乎是GAE最常用的选项。

如果这不连贯,我很抱歉。这些技术超出了我的舒适范围,因此我无法搜索解决方案并对我的问题进行措辞。

3 个答案:

答案 0 :(得分:4)

App Engine在UI方面非常灵活。 Python支持Django模板(开箱即用0.96,一行配置更改为1.2)。 Django模板易于使用,并且JavaScript工具包中立。我使用jQuery,但这是App Engine没有强加的个人选择。在UI方面,它是一个安全的选择,每当你学习Django模板语言和jQuery都可以移植到App Engine之外。我没有看到很多关于Django的小便,但也许我在不同的地方闲逛。

虽然您强调了UI方面,但我首先要了解如何将大图绘制到App Engine数据存储区,以及针对图形的查询将如何执行。 App Engine数据存储区的细微差别经常使具有大量关系经验并期望表和真正外键的人绊倒。它非常适合存储图形,但值得探索和原型化您的查询,以便您知道自己要了解的内容。

App Engine SDK非常适合本地(例如,咖啡店中的笔记本电脑)开发。

但是,我有点偏颇。

答案 1 :(得分:1)

它必须在python中吗? GAE对GWT提供了很好的支持。 GWT eclipse插件可以直接编译和部署到GAE,无需进一步修改。符合您所有三项要求的最佳解决方案将使用GWT + GAE / J.

如果您主要寻找图表/图表解决方案,那么基于Flash * gasp *的一些优秀解决方案非常易于使用,例如AnyChart。

作为旁注,如果您正在设计任何UI,了解和理解MVC模式至关重要。大多数其他UI设计模式都是MVC的衍生产品,因此无论您选择哪种框架,您都可能正在学习MVC。

祝你好运 -tjw

答案 2 :(得分:1)

考虑到您的第三个要求:看一下类似Protovis interactive graph visualization或此Infovis graph examplecode)的内容。我不知道你的任务范围,但如果你很幸运,你可能不需要深入研究MVC杂草。以第二个例子为例,Web后端的作用只是1)为一些json对象提供你需要布局的信息,以及2)处理响应。 (顺便说一句,所有这些链接都是开源的并且有很好的文档记录。)更具体地说,假设您有一个包含如下界面的图表:http://thejit.org/static/v20/Jit/Examples/Hypertree/example3.htmlformatted source)。它的外观概述可能很简单:

伪HTML:

<a_canvas_svg_or_webgl_object id="your_surface"> ... </a_canvas...>

<script src="... // one of the above visualization libraries

<script>
selector(#your_surface...
data = json.gets("/graph/minard/data.json"); //typical method name in these libs
data.do_stuff()   // bunch of methods from the visualization guys...
                  // save state/user input to json object
button.onclick... // do an ajax post to an url like "/graph/a/data.json?extent=1234"
                  // use something like query string ie, for when 'extent' changes
etc...

然后在服务器上(例如GAE兼容的microframework Flask伪代码(但不是伪代码)):

@app.route('/')
def frontpage():
    return render_template('your_front_page.html')

@app.route('/graph/<graph_name>/<kind>')
def backend():
    if request.method == 'POST':
        gql_foo.save_user_stuff(request.json)
    if request.method == 'GET':
        if kind == 'data.json':
            relevant_part_of_graph = request.args['extent']
            requested_data = jsonify(db_query(parameters=graph_name...
            return requested_data
    else:
        return 404

如果这与你的应用程序空间没有任何重叠,那么你至少可以通过查看d3来获得这个答案,这是一个较低的级别。