Web 2.0生态系统/堆栈

时间:2011-02-07 06:20:28

标签: javascript python ajax django pyramid

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

  1. 模板引擎:您可以从代码中抽象出HTML。有道理。

  2. SQLAlchemy等:ORM。细

  3. 渲染器。不知道。

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

  5. 形式模板库(formish,formalchemy等):这些与大局有什么关系?他们在哪里插上?

  6. 我缺少的任何其他重要组件?

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

2 个答案:

答案 0 :(得分:8)

  

1)模板引擎:适合的东西   你抽象出你的HTML   你的代码。有道理。

有几个可用。 Mako尝试在模板中使用许多常见的Python习语,以避免学习许多新概念。 Jinja2类似于Django,但具有更多功能。 Genshi就是你喜欢基于XML的模板。

作为对整个事物不熟悉的人,很难说不幸的是哪一个最容易开始。也许Jinja2。

  

2)SQLAlchemy等。一个ORM。细

是的。

  

3)渲染器。不知道。

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

简而言之,渲染器选项只会查看您传递的名称,并找到与扩展名匹配的模板引擎(.mak,.pt,'json','string',。etc),并呈现字典结果。

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

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

在金字塔中,你可以做同样的事情:

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

后者是一种有用的功能有几个原因:

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

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

  3. 考虑这个示例,根据HTTP请求是否为XHR(AJAX请求需要JSON格式化结果,而不是希望模板引擎向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应用程序发送可能需要JSON格式结果的HTTP请求之外,它们与Pyramid没有交互。

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

      

    5)表格模板库(formish,   formalchemy et al)这些是如何相关的   大局?它们插在哪里   在?

    我强烈建议完全忽略这些,并编写基本的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以开始设计样式。

    接下来,你可以从jQuery的一些基本Javascript开始,让事情在页面上移动,并通过AJAX与webapp交互以获得更多数据。只是不要立刻解决太多问题,应该更容易看出它们如何结合在一起。

答案 1 :(得分:3)

  

3)渲染器。不知道。

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

  

4)JS库:

这些是用于编程用户界面的内容。用户界面可能只是在HTML之上打了一些漂亮的效果,但它可能会更多。例如,Google Docs是JavaScript,而不仅仅是漂亮的效果; Cloud9 IDE将是使用JavaScript构建的另一个示例完整应用程序(感谢Raynos的另一个示例)。

  

5)表格模板库

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

  

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

您可以将现代Web堆栈视为传统的客户端服务器系统;这可能会激怒一些人,但除了可能的规模之外,这里没有任何新的东西。客户端使用HTML和CSS构建,用于布局和JavaScript(可能带有工具包),用于功能和视觉效果。服务器是某种Web服务器。客户端和服务器之间的通信通常是通过HTTP的JSON和HTML的组合完成的。您可以将web-1.0(可能原谅我的营销谈话术语)视为老式哑终端,其中web-2.0更像是一个X终端,客户端有一些大脑。