8

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

  1. 模板引擎:让您从代码中抽象出 HTML 的东西。说得通。

  2. SQLAlchemy 等人:一个 ORM。美好的。

  3. 一个渲染器。不知道。

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

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

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

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

4

2 回答 2

8

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、formalchemy 等)这些与全局有什么关系?他们在哪里插入?

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

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

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

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

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

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

于 2011-04-05T00:23:15.913 回答
3

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 终端。

于 2011-02-07T07:05:24.373 回答