我在App Engine(Python)中使用MVC、GUI+交互式可视化的选项是什么?

2 投票
3 回答
674 浏览
提问于 2025-04-16 19:21

我正在创建一个应用,让用户可以查询、操作和探索一个非常大的图形。

我想知道,怎么做图形用户界面(GUI)和可视化效果才是“最佳”选择?

这里的“最佳”是指:
1. 符合网络标准,不是那种一时流行的解决方案
2. 允许有创意的灵活性
3. 直观易懂,不需要花几周时间学习,也不需要几个月才能掌握

我应该开始学习Django,了解它的MVC(模型-视图-控制器)是怎么工作的吗?我看到的关于Django的评价都不太好,但它似乎是Google App Engine(GAE)上最常用的选择。

抱歉如果我说得不太清楚。这些技术对我来说有点陌生,所以我在寻找解决方案和表达问题时有些困难。

3 个回答

1

这个一定要用Python吗?Google App Engine(GAE)对Google Web Toolkit(GWT)的支持非常好。GWT的Eclipse插件可以直接编译和部署到GAE上,不需要额外修改。满足你所有三个要求的最佳解决方案就是使用GWT加上GAE/J。

如果你主要是在找图表或绘图的解决方案,有一些基于Flash的不错选择,比如AnyChart,这些都比较好用。

顺便提一句,如果你在设计任何用户界面,了解和掌握MVC模式是非常重要的。大多数其他的用户界面设计模式都是基于MVC的,所以无论你选择哪个框架,你可能都会学习MVC。

祝你好运
-tjw

1

考虑到你的第三个需求,可以看看这个Protovis互动图形可视化,或者这个信息可视化图示例代码)。我不知道你的任务范围有多大,但如果运气好的话,你可能不需要深入到MVC的复杂细节中。以第二个示例为例,网页后端的角色就是1)提供一些包含你需要布局信息的json对象,2)处理响应。(顺便说一下,所有这些链接都是开源的,并且文档齐全。)更具体地说,假设你有一个界面像这样的图形:http://thejit.org/static/v20/Jit/Examples/Hypertree/example3.html格式化源代码)。它的外观大致可以是这样的:

伪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兼容的微框架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获得一些启发,它的层次稍低一些。

4

App Engine在用户界面方面很灵活。Python支持Django模板(默认是0.96版本,稍微改一下配置就能用到1.2版本)。Django模板使用起来很简单,而且和JavaScript工具包没有关系。我个人用的是jQuery,但这完全是我自己的选择,App Engine并没有强制要求你用什么。在用户界面方面,选择Django模板是个安全的决定,花时间学习Django模板语言和jQuery的知识,未来在其他地方也能用得上。我没有看到很多人对Django有负面评价,可能是我待的地方不一样。

虽然你强调用户界面,但我建议你先考虑如何把你那张大图(图形)映射到App Engine的数据存储中,以及对这张图的查询性能如何。App Engine的数据存储有很多细节,可能会让那些有丰富关系型数据库经验的人感到困惑,因为他们习惯于表格和真正的外键。虽然它很适合存储图形数据,但你最好先探索一下,做一些原型测试,这样你才能知道自己在做什么。

App Engine的开发工具包在本地开发(比如在咖啡店用笔记本电脑)时非常好用。

不过,我可能有点偏见。

撰写回答