【问题标题】:The Web 2.0 Ecosystem/StackWeb 2.0 生态系统/堆栈
【发布时间】:2011-02-07 06:20:28
【问题描述】:

作为前端网站开发的新手,我可以理解一些东西,例如路由,ORM等。我不明白它们是如何一起发挥作用的。我的理解是,使用 Pyramid/Django 等构建的网站有很多组件:

  1. 模板引擎:用于从代码中抽象出 HTML 的东西。有道理。

  2. SQLAlchemy 等:一个 ORM。很好。

  3. 渲染器。不知道。

  4. JS 库:JQuery 等: 除了添加漂亮的效果外,不知道这些有什么用。这如何与模板引擎交互?这如何与整个框架交互?我可以在 Pyramid 中为 jquery 编写代码,还是单独编写 JS,将我的 JS 文件插入到我的模板中或...?

  5. 表单模板库(formish、formalchemy 等):这些与全局有什么关系?它们在哪里插入?

我还缺少任何其他重要组件吗?

那么,有人可以帮我解释一下堆栈吗?

【问题讨论】:

  • 读完这本书,我意识到网络编程真的是多么的复杂
  • @Tomasz Zielinkski:实际上并不比任何其他客户端/服务器编程复杂。除非我们使用了一些原本不适合“真正”应用程序开发的组件。
  • 我不确定您从哪里得到“渲染器”一词,但在某些情况下它可能用作“模板引擎”的别名。

标签: javascript python ajax django pyramid


【解决方案1】:

1) 模板引擎:用于 您可以从中抽象出您的 HTML 你的代码。有道理。

其中有几种可用。 Mako 尝试在模板中使用许多常见的 Python 习惯用法,以避免学习许多新概念。 Jinja2 类似于 Django,但功能更多。如果您喜欢基于 XML 的模板,Genshi 就可以。

不幸的是,作为一个新手,很难说哪个最容易开始。也许是 Jinja2。

2) SQLAlchemy 等人。一个 ORM。很好。

是的。

3) 渲染器。不知道。

渲染器是一个 Pyramid 视图配置选项,它告诉 Pyramid 如果您的视图返回一个 dict,那么它应该被传递给给定的“渲染器”。渲染器设置为使用扩展名,Pyramid 内置了几个: http://docs.pylonsproject.org/projects/pyramid/1.0/narr/renderers.html#built-in-renderers

简而言之,renderer 选项仅查看您传递给它的名称,并找到与扩展名(.mak、.pt、'json'、'string'、.etc)匹配的模板引擎,并渲染 dict结果。

在许多框架中,您不会将渲染器指定为配置,而是在视图中包含一些代码,如下所示:

def somefunc(request):
    return render_to_response('/some/template.mak', {})

在 Pyramid 中,您可以使用以下方法做同样的事情:

@view_config(renderer='/some/template.mak')
def somefunc(request):
    return {}

后者之所以有用,有几个原因:

  1. 当它完全处于配置状态时,您可以覆盖渲染器而无需更改视图代码逻辑。

  2. 您可以添加多个配置,根据其他条件更改渲染器。

考虑这个示例,它根据 HTTP 请求是否为 XHR(需要 JSON 格式结果的 AJAX 请求,而不是需要模板引擎输出 HTML 的一般 HTTP 请求)来更改渲染器。

@view_config(renderer='json', xhr=True)
@view_config(renderer='/some/template.mak')
def somefunc(request):
    # lookup some_dict_data in a db, etc.
    return some_dict_data

4) JS 库:JQuery 等。不知道 这些除了添加有什么用 漂亮的效果。这如何相互作用 使用模板引擎?如何 这与整个互动 框架?我可以为jquery编写代码吗 在金字塔中,还是我写 JS 分别,将我的 JS 文件插入到我的 模板还是...?

JS 库使编写 Javascript 变得更容易。它们在浏览器中与 DOM 交互,除了向您的 Web 应用程序发送 HTTP 请求(可能需要 JSON 格式的结果)之外,它们与 Pyramid 没有交互。

首先,我建议您完全忽略 Javascript,直到您更加熟悉 HTML、DOM 树,并获得一个仅使用 HTML、CSS 和 Web 应用程序的网站。

5) 表单模板库 (formish, 形式化学等)这些有什么关系 到大局?他们在哪里插入 在?

我强烈建议完全忽略这些,并编写基本的 HTML 表单元素。您是整个 Web 堆栈的新手,如果不先熟悉基础知识,确实没有必要直接跳到 Web 开发的最高级方面。

但是,在编写基本表单之后,您需要一个表单验证库,以便更轻松地验证提交的表单是否包含有效参数。回到 PHP 的旧时代,人们会编写数百行通过表单的 if/else 语句(有些仍然这样做!ack!)。

现在我们使用表单验证库,可以轻松声明表单的有效参数。我建议从 FormEncode 开始,因为它很容易使用 just 进行验证。对于 Pyramid,使用 FormEncode 的最简单方法可能是 pyramid_simpleform: http://packages.python.org/pyramid_simpleform/

暂时先忽略表单渲染部分,自己在模板中编写 HTML 表单元素,使用 pyramid_simpleform 只是为了方便 FormEncode 集成。

简而言之,首先使用视图函数和模板显示带有链接的 HTML 页面(并使用 URL 调度,对于初学者来说比遍历更容易掌握)。然后添加表单、它们的 HTML 和验证,然后添加 CSS 以开始设置样式。

接下来,您可以从一些带有 jQ​​uery 的基本 Javascript 开始,以使页面上的内容移动,然后通过 AJAX 与 webapp 交互以获取更多数据。只是不要一次处理太多,应该更容易看出它们是如何组合在一起的。

【讨论】:

  • 有些矛盾:“Mako 试图在模板中利用许多常见的 Python 习语来避免必须学习许多新概念”然后“......很难说哪个是不幸的是,最容易开始。也许是 Jinja2。”
【解决方案2】:

3) 渲染器。不知道。

通常,渲染器会获取您的数据/模型并将其转换为客户想要的东西。如果客户端只是一个浏览器,那么渲染器通常会通过模板混合您的数据以生成 HTML。如果客户端是一些 JavaScript 代码或非浏览器应用程序(桌面应用程序、正在使用您的数据的另一台服务器……),那么渲染器通常会生成 JSON(或可能是 XML)。您可以将其视为序列化或编组系统。

4) JS 库:

这些是您用来对用户界面进行编程的东西。用户界面可能只是一些在 HTML 之上的漂亮效果,但它可能更多。例如,Google Docs 是 JavaScript 并且不仅仅是漂亮的效果。 Cloud9 IDE 将是另一个使用 JavaScript 构建的完整应用程序示例(感谢 Raynos 提供的另一个示例)。

5) 表单模板库

您可以将这些(或多或少)视为模板引擎的宏系统。如果您有数据架构,那么您可以使用这些东西来生成模板块并自动处理相应返回数据的服务器端处理。

我还缺少任何其他重要组件吗?

您可以将现代 Web 堆栈视为传统的客户端服务器系统;这可能会激怒一些人,但除了可能的规模之外,这里没有什么全新的东西。客户端使用 HTML 和 CSS 构建布局,使用 JavaScript(可能带有工具包)构建功能和吸引眼球。服务器是某种网络服务器。客户端和服务器之间的通信通常通过 HTTP 上的 JSON 和 HTML 的组合来完成。您可以将 web-1.0(愿上帝原谅我的营销术语)视为老式的哑终端,而 web-2.0 更像是客户端上的一些大脑的 X 终端。

【讨论】:

  • 对于 JS 库,以 cloud9ide 为例。它是一个用 JS 模拟的完整 IDE
  • @Raynos:干杯,谢谢。我添加了 Cloud9 IDE 作为另一个示例。
猜你喜欢
  • 1970-01-01
  • 2014-07-21
  • 1970-01-01
  • 2014-05-27
  • 1970-01-01
  • 2023-03-23
  • 2020-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多