01:单文件Web应用程序

从Pyramid开始最简单的方法是什么?单个文件模块。没有python包,没有 pip install -e . ,没有其他机器。

背景

微框架风靡一时,直到下一个闪亮的东西出现。”“微框架”是一个营销术语,而不是技术术语。他们的精神负担很低:他们做的太少了,你唯一需要担心的是 你的东西 .

Pyramid是特殊的,因为它可以作为一个单一的文件模块微框架。您可以有一个单独的python文件,它可以直接由python执行。但Pyramid也提供了扩展到最大应用的设施。

python有一个标准名为 WSGI 这定义了python web应用程序如何插入标准服务器、获取传入请求和返回响应。大多数现代的PythonWeb框架都遵循“MVC”(模型-视图-控制器)应用程序模式,其中模型中的数据具有一个视图,用于调解与外部系统的交互。

在这一步中,我们将看到WSGi服务器、WSGi应用程序、请求、响应和视图的简要介绍。

目标

  • 尽可能简单地获取正在运行的PyramidWeb应用程序。

  • 把它作为一个很好理解的基础来添加每一个复杂性单元。

  • 初次接触WSGi应用程序、请求、视图和响应。

步骤

  1. 确保已按照中的步骤操作 要求 .

  2. 从工作区目录开始 (~/projects/quick_tutorial )创建此步骤的目录:

    cd ~/projects/quick_tutorial; mkdir hello_world; cd hello_world
    
  3. 将以下内容复制到 hello_world/app.py

     1from waitress import serve
     2from pyramid.config import Configurator
     3from pyramid.response import Response
     4
     5
     6def hello_world(request):
     7    print('Incoming request')
     8    return Response('<body><h1>Hello World!</h1></body>')
     9
    10
    11if __name__ == '__main__':
    12    with Configurator() as config:
    13        config.add_route('hello', '/')
    14        config.add_view(hello_world, route_name='hello')
    15        app = config.make_wsgi_app()
    16    serve(app, host='0.0.0.0', port=6543)
    
  4. 运行应用程序:

    $VENV/bin/python app.py
    
  5. 在浏览器中打开http://localhost:6543/。

分析

不熟悉python web编程?如果是这样的话,模块中的一些行将进行价值解释:

  1. Line 11 . 这个 if __name__ == '__main__': python的说法是“从命令行运行时从这里开始”,而不是在导入这个模块时。

  2. Lines 12-14 . 使用Pyramid configurator 在一个 context manager 连接 view 特定URL的代码 route .

  3. Lines 6-8 . 实现生成 response .

  4. Lines 15-17 . 发表一篇文章 WSGI 使用HTTP服务器的应用程序。

如本例所示, configurator 在Pyramid发展中起着核心作用。从松散耦合的部分通过 应用程序配置 是Pyramid中的一个中心思想,我们将定期在此重访 快速教程 .

额外credit

  1. 为什么要这样做:

    print('Incoming request')
    

    ……代替:

    print 'Incoming request'
    
  2. 如果返回一个HTML字符串会发生什么情况?整数序列?

  3. 放一些无效的东西,例如 print xyz ,在View函数中。杀了你 python app.py 具有 ctrl-C 然后重新启动,然后重新加载浏览器。在控制台中看到异常?

  4. 这个 GI 在里面 WSGI 代表“网关接口”。这是在什么样的网络标准之后建模的?